WPF: Вернуть результат нажатия кнопки из диалогового окна

Ранее я писал, как получить результат нажатия кнопки из закрытого окна проекта 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>

Немного подробнее здесь.