2017-01-20 22 views
2

我目前面临一个非常奇怪的问题。我在使用Caliburn.Micro的WPF应用程序中使用AvalonDock(嵌入在最后一个WPF Extended Toolkit 3中)。AvalonDock在文档关闭时导致崩溃

在我MainView.xml我有这个DockingManager:

<xcad:DockingManager x:Name="dockMngr" 
        Grid.Row="1" 
        AllowMixedOrientation="True" 
        DataContext="{Binding DockingManagerVM}" 
        DocumentsSource="{Binding Documents}" 
        AnchorablesSource="{Binding Anchorables}" 
        ActiveContent="{Binding CurrentDocument, Mode=TwoWay}" 
        cal:Message.Attach="[Event DocumentClosed] = [Action DocumentClosed($eventArgs)]; 
             [Event DocumentClosing] = [Action DocumentClosing($eventArgs)]"> 

DockingManagerVM.cs我创造了一些默认文档的构造函数来显示:

Documents = new ObservableCollection<GenericDocumentViewModel>(); 
Documents.Add(new MyDocumentViewModel()); 
Documents.Add(new MyDocumentViewModel()); 
Documents.Add(new MyDocumentViewModel()); 
CurrentDocument = _documents[0]; 

显然我定义了MyDocumentViewModel和要在XAML中作为文档显示的视图之间的“映射”:

<xcad:DockingManager.Resources> 
    <DataTemplate DataType="{x:Type vm:MyDocumentViewModel}" > 
     <local:MyDocumentView /> 
    </DataTemplate> 
</xcad:DockingManager.Resources> 

出于某种原因,当我尝试关闭之前我没有作出了积极(通过点击相应的选项卡上)应用程序崩溃与此消息的文档:

An unhandled exception of type 'System.NullReferenceException' occurred in WindowsBase.dll 

Additional information: Object reference not set to an instance of an object. 

遗憾的是没有提供细节从Visual Studio(如果你有任何想法如何让他们会很好)。

下面是步骤,我试图模仿(或没有)问题:

运行应用程序;有3个文件,第一个是活动的和示出,则:

  1. 我通过点击选项卡控制的“X”关闭第二或第三文档;应用程序崩溃
  2. 我打开第二个文档(没有关闭第一个文档);我可以关闭第一个和第二个文档,但如果我试图关闭最后一个(因为我没有打开它)应用程序崩溃
  3. 我关闭第一个文档,然后第二个文档被标记为激活并显示。我关闭了这个当前的文档,显示了第三个文档,我可以关闭这个文档。 没有崩溃
  4. 我打开所有的文件,通过点击标签菜单,一个接一个;那么我可以按任意顺序关闭每个文档而不会崩溃
  5. 我右键单击选项卡控件并单击“关闭所有文档”(此功能由AvalonDock提供):所有文档关闭没有任何崩溃

你能告诉我,如果你发现一些错误我在做什么,或者有没有什么办法来调试AvalonDock为了弄清楚到底是怎么回事?

非常感谢!

回答

2

最后我找到了解决方案!看起来这是一个与AvalonDock 3.0.0(由Extended.WPF.Toolkit 3.0.0提供)相关的错误。

从NuGet管理器我安装了Xceed.Wpf.AvalonDock(版本3.2.16567.21060)修复了这个问题。

之后,由于我导入了external VS2013 theme,NuGet自动切换到Xceed.Wpf.Avalondock 2.9.15603.14400,并且它也正常工作。 :)