Когда ShowDialog() возвращает null?
WPF Window.ShowDialog
метод возвращает значение nullable boolean. Так что CommonDialog.ShowDialog
.
Теперь я понимаю случаи, когда они вернут false (пользователь нажал "Отмена" или нажал Esc), и когда они вернут true (код устанавливает Window.DialogResult
в true, возможно, в ответ на нажатие OK). Но null?
Моя первая мысль заключается в том, что нажатие клавиши заголовка Close может вернуть значение null. Но состояние документов (и я подтвердил при тестировании), что кнопка закрытия строки заголовка рассматривается как Отмена.
Итак, когда Window.ShowDialog
или CommonDialog.ShowDialog
когда-либо возвращают null?
Ответы
Ответ 1
Метод всегда возвращает true или false, и это всегда совпадает с свойством DialogResult окна во время его закрытия.
Но свойство DialogResult имеет значение null до закрытия окна, а другой поток может проверить свойство. Так что имеет смысл, что возвращаемое значение является нулевым логическим, чтобы соответствовать свойству, даже если оно никогда не является нулевым.
Ответ 2
Если я возвращаю DialogResult = null в событии Click для кнопки, окно остается открытым.
private void OkButton_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
if ( btn != null )
{
// forces all control to update...
btn.Focus();
}
// TEST IF OK TO CLOSE
bool rc = _vm.ProcessOkCommand();
if (rc)
{
DialogResult = true;
}
else
{
DialogResult = null;
}
}
<Button Content="OK" Name ="cmdOK" IsDefault="True" Click="OkButton_Click"/>
Ответ 3
Я могу привести пример, с которым я только что столкнулся. Window.ShowDialog()
вернет Window.ShowDialog()
, когда вы выполните следующие шаги:
- Сначала вы закрываете все окна
Application
. - Все другие объекты
Window
, которые были созданы до сих пор с new
ключевым словом, закрываются. - Вы пытаетесь создать новое
Window
и попытаться вызвать Window.ShowDialog()
для него. Он вернет ноль.
Это потому, что, по-видимому, у вас нет существующего Window
в котором ваш новый диалог может быть привязан, чтобы вести себя как диалог, которому принадлежит самое верхнее состояние окна.