2017-01-20 2 views
2

В настоящее время я столкнулся с очень странной проблемой. Я использую AvalonDock (встроенный в последний WPF Extended Toolkit 3) в приложении WPF с Caliburn.Micro.Авалон, вызывающий сбой при закрытии документа

В моей 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. Закройте первый документ, затем второй документ будет помечен как активен и показан. Я закрываю этот текущий документ, отображается третий документ, и я могу закрыть его. No crash.
  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, и он работает правильно. :)

Смежные вопросы