关闭文档时 AvalonDock 导致崩溃
AvalonDock causing crash when a document is closed
我目前面临一个非常奇怪的问题。我在 Caliburn.Micro.
的 WPF 应用程序上使用 AvalonDock(嵌入在最后一个 WPF Extended Toolkit 3 中)
在我的 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 中显示为文档的视图之间定义了 "mapping":
<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" 关闭第二个或第三个文档;应用程序 崩溃
- 我打开第二个文档(没有关闭第一个);然后我可以关闭第一个和第二个文档,但是如果我尝试关闭最后一个(因为我没有打开它)应用程序 crashes
- 我关闭第一个文档,然后第二个文档被标记为活动并显示。我关闭当前文档,显示第三个文档,我可以关闭这个。 没有崩溃。
- 我通过单击选项卡菜单逐个打开所有文档;然后我可以按任何顺序关闭每个文档 而不会崩溃 .
- 我右击选项卡控件,点击"Close all documents"(此功能由AvalonDock提供):所有文档关闭没有任何崩溃.
如果您发现我正在做的事情有问题,或者是否有任何方法可以调试 AvalonDock 以弄清楚发生了什么,请告诉我?
非常感谢!
终于找到解决办法了!这似乎是与 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,也能正常工作。 :)
我目前面临一个非常奇怪的问题。我在 Caliburn.Micro.
的 WPF 应用程序上使用 AvalonDock(嵌入在最后一个 WPF Extended Toolkit 3 中)在我的 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 中显示为文档的视图之间定义了 "mapping":
<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" 关闭第二个或第三个文档;应用程序 崩溃
- 我打开第二个文档(没有关闭第一个);然后我可以关闭第一个和第二个文档,但是如果我尝试关闭最后一个(因为我没有打开它)应用程序 crashes
- 我关闭第一个文档,然后第二个文档被标记为活动并显示。我关闭当前文档,显示第三个文档,我可以关闭这个。 没有崩溃。
- 我通过单击选项卡菜单逐个打开所有文档;然后我可以按任何顺序关闭每个文档 而不会崩溃 .
- 我右击选项卡控件,点击"Close all documents"(此功能由AvalonDock提供):所有文档关闭没有任何崩溃.
如果您发现我正在做的事情有问题,或者是否有任何方法可以调试 AvalonDock 以弄清楚发生了什么,请告诉我?
非常感谢!
终于找到解决办法了!这似乎是与 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,也能正常工作。 :)