Ранее я писал, как получить результат нажатия кнопки из закрытого окна проекта Windows Forms. Для проекта на Windows Presentation Foundation все оказалось совсем по другому. Например вызов диалогового окна такой же, как и для Windows Forms (с помощью ShowDialog()), при этом родительское окно в этот момент недоступно — на него нельзя переключиться. По другому реализовано возвращение и обработка результата нажатой кнопки.
В WPF у элемента нет свойства DialogResult и метод ShowDialog() не возвращает значение типа DialogResult, а вместо этого он возвращает результат типа Nullable bool.
Таким образом, чтобы обработать результат закрытия окна, нужно написать код подобный этому:
MyDialog dialog = new MyDialog();
dialog.ShowDialog();
if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
{
MessageBox.Show("Нажата кнопка OK");
}
else
{
MessageBox.Show("Нажата кнопка Cancel");
}
ShowDialog возвращает значение True, которое равносильно тому, что нажата кнопка со значением DialogResult.Ok или значение False, которое говорит о том, что была нажата кнопка Cancel.
Перед этим необходимо в редакторе XAML или в окне дизайнера назначить кнопкам OK и Cancel свойства. Для кнопки ОК нужно установить свойство IsDefault в значение True. А для кнопки Cancel нужно установить в значение True свойство IsCancel.
Код для диалогового окна может быть таким:
private void btnOK_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
this.Close();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
this.Close();
}
XAML-код:
<Window x:Class="WpfApplication6.DialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DialogWindow" Height="78" Width="300">
<Grid>
<Button x:Name="btnOK" Content="OK" HorizontalAlignment="Left"
VerticalAlignment="Top" Width="75" Margin="65,10,0,0" IsDefault="True" Click="btnOK_Click"/>
<Button x:Name="btnCancel" HorizontalAlignment="Left" VerticalAlignment="Top"
Width="75" Margin="145,10,0,0" Content="Cancel" IsCancel="True" Click="btnCancel_Click"/>
</Grid>
</Window>
Немного подробнее здесь.
- EVE-Online: Фильтры каналов - 23.11.2024
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024
- VSCode: Найти и удалить элементы xml - 29.10.2024