Обработка DialogResult - PullRequest
       28

Обработка DialogResult

0 голосов
/ 13 декабря 2011

У меня есть вопрос о доступе к диалоговым данным из wpf / у меня есть ProgressDialog :System.Windows.Window И я вызываю его в OnButtonClick так:

        void OnButtonClick(object sender, RoutedEventArgs e)
        {   
            ProgressDialog dlg = new ProgressDialog("");
            //dlg.AutoIncrementInterval = 0;
            LibWrap lwrap = new LibWrap();
            DoWorkEventHandler handler = delegate { BitmapFrame bf = lwrap.engine(frame); };
            dlg.CurrentLibWrap = lwrap;
            dlg.AutoIncrementInterval = 100;
            dlg.IsCancellingEnabled = true;
            dlg.Owner = Application.Current.MainWindow;
            dlg.RunWorkerThread(0, handler);
}

Вопрос - как проверить эту функцию (OnButtonClick) если DialogResult в порядке (другими словами - как получить доступ к внутренним полям dlg после его завершения)?

1 Ответ

1 голос
/ 13 декабря 2011

DialogResult обычно не является внутренним полем, а скорее общедоступным свойством, поэтому dlg.DialogResult должно быть в порядке (учитывая, что оно наследуется от Window), вам необходимо привести его к типу bool.

Я не вижу, чтобы вы открывали окно где-либо, если вы используете ShowDialog, возвращаемое значение автоматически становится DialogResult, и вызывающий поток блокируется до тех пор, пока он не закроется.

var result = (bool)dlg.ShowDialog();

Если вам нужен немодальный диалог, вы можете использовать Show, подписаться на событие Closed и проверить DialogResult там.

dlg.Closed += (_,__) =>
{
    var result = (bool)dlg.ShowDialog();
    // Do something with it.
}
dlg.Show();

Конечно, диалог должен устанавливать свойство в любом случае. Действия по умолчанию, такие как Alt + f4, устанавливают значение false.

...