我目前面临一个非常奇怪的问题。我在使用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个文件,第一个是活动的和示出,则:
- 我通过点击选项卡控制的“X”关闭第二或第三文档;应用程序崩溃
- 我打开第二个文档(没有关闭第一个文档);我可以关闭第一个和第二个文档,但如果我试图关闭最后一个(因为我没有打开它)应用程序崩溃
- 我关闭第一个文档,然后第二个文档被标记为激活并显示。我关闭了这个当前的文档,显示了第三个文档,我可以关闭这个文档。 没有崩溃。
- 我打开所有的文件,通过点击标签菜单,一个接一个;那么我可以按任意顺序关闭每个文档而不会崩溃。
- 我右键单击选项卡控件并单击“关闭所有文档”(此功能由AvalonDock提供):所有文档关闭没有任何崩溃。
你能告诉我,如果你发现一些错误我在做什么,或者有没有什么办法来调试AvalonDock为了弄清楚到底是怎么回事?
非常感谢!