2017-01-20 42 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,並且它也正常工作。 :)