Сохранение содержимого документа Avalon Dock перед закрытием C#

Я использую Avalon Dock в проекте, похожем на блокнот ++, у меня есть документы как содержимое документа, проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь закрывает содержимое документа

я хочу, чтобы он получил всплывающее сообщение, если он / она хочет сохранить документ перед закрытием.

Как я могу это сделать?

Заранее спасибо.


person raym0nd    schedule 22.06.2011    source источник
comment
компонент док-станции выставляет событие onTabClosing, где вы можете установить для e.Cancel значение true, если пользователь отменяет вместо сохранения... например?   -  person Davide Piras    schedule 08.07.2011
comment
@Davide Piras, мой класс расширяет содержимое документа Avalon, и я добавляю его в свой DockingManager. у каждого документа есть кнопка закрытия, я могу закрыть его, но я хочу подсказать пользователю, хочет ли он / она сохранить, прежде чем я не знаю, как поймать событие закрытия или как и где его вызвать. `общедоступный частичный класс EditorCtrl: DocumentContent`   -  person raym0nd    schedule 08.07.2011


Ответы (1)


В версии AvalonDock, которую я использую (1.2.2668.0), я могу просто определить обработчик события Closing для DocumentContent.

пример добавления обработчика к DocumentContent, я добавляю обработчик к событию закрытия:

DocumentContent dc = new DocumentContent();
dc.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(dc_Closing);

Пример обработчика:

    void dc_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        MessageBoxResult Res = MessageBox.Show("Do you want to save?", "Save document?", MessageBoxButton.YesNoCancel, MessageBoxImage.Question);
        switch (Res)
        {
            case MessageBoxResult.Cancel:
                //User cancelled, he probably doesn't want to close the window
                e.Cancel = true; 
                break;
            case MessageBoxResult.No:
                //Nothing to do - continue closing
                e.Cancel = false;
                break;
            case MessageBoxResult.Yes:
                //He does want to save - launch save here!
                Save_Function_For_DocumentContent(sender);
                e.Cancel = false;
                break;
            default:
                //Something unexpected, better abort
                e.Cancel = true; 
                break;
        }

Надеюсь, это поможет, если нет, то какую версию AvalonDock вы используете? }

person NetSquirrel    schedule 02.08.2011
comment
У вас есть идеи, как отключить плавающее поведение DocumentContent в DocumentPane? - person raym0nd; 03.08.2011
comment
Обычно dc.IsFloatingAllowed = false; должно быть достаточно, если вы не сделали что-то особенное. (Предположим, что dc — это DocumentContent). Я протестировал его в Sample1_35 из AvalonDock 1.3 (сборка 3571). - person NetSquirrel; 03.08.2011
comment
Спасибо. Я не нашел хорошей документации для AvalonDock, вы мой спаситель. - person raym0nd; 03.08.2011