DialogResult WPF - PullRequest
       1

DialogResult WPF

6 голосов
/ 27 декабря 2010

Я читаю одну книгу, в которой написано

Вместо установки DialogResult вручную после того, как пользователь нажимает кнопка, вы можете назначить кнопку как кнопка принять (установив IsDefault в true). Нажав на это Кнопка автоматически устанавливает DialogResult из окна в true. Точно так же вы можете назначить кнопку в качестве кнопки отмены (путем установки IsCancel для истины), в этом случае щелкнув по нему, вы установите DialogResult отменить.

Это главное окно:

<Window x:Class="WpfApplicationWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Width="400" Height="400">
    <StackPanel>

        <Button Name="BtnShowDialogStatus" Click="BtnShowDialogStatus_Click">DIALOG RESULT</Button>
    </StackPanel>
</Window>

Код события клика:

private void BtnShowDialogStatus_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show(new NewWindow().ShowDialog().ToString());
}

И это диалоговое окно, которое я открываю при событии щелчка:

<Window x:Class="WpfApplicationWPF.NewWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="NewWindow" Height="300" Width="300">
    <StackPanel>
        <Button Name="BtnDEfault" IsDefault="True" Click="BtnDEfault_Click">DEFAULT BUTTON</Button>
        <Button Name="BtnCancel" IsCancel="True" Click="BtnCancel_Click">CANCEL BUTTON</Button>
    </StackPanel>
</Window>   

Вот код для этого:

private void BtnDEfault_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

Я вижу, что он возвращает DialogResult только как false независимо от того, нажимаю ли я кнопку по умолчанию или кнопку отмены.

Ответы [ 4 ]

7 голосов
/ 27 декабря 2010

IsDefault связывает кнопку с клавишей Enter, так что нажатие клавиши Enter вызовет событие Click.Это не означает, что кнопка «Да» вернет истину для DialogResult.

См. Ссылки. Это прояснит для вас вопросы

http://blog.wpfwonderland.com/2010/03/22/getting-a-dialogresult-from-a-wpf-window/

http://www.wpftutorial.net/Dialogs.html

Надеюсь, это поможет ...

6 голосов
/ 27 декабря 2010

измени свой код на

private void BtnDEfault_Click(object sender, RoutedEventArgs e)
{
    DialogResult = true;
    this.Close();
}

private void BtnCancel_Click(object sender, RoutedEventArgs e)
{
    DialogResult = false;
    this.Close();
}

надеюсь, это поможет

2 голосов
/ 27 декабря 2010

Насколько я понимаю, установка IsDefault как true и IsCancel как false позволяет только назначить, какое событие должно произойти, т.е. окно будет запускать событие закрытия по клавише 'Escape' для IsCancel и для клавиши Enter для IsDefault = true.

Вам нужно будет установить результат диалога из ваших обработчиков нажатий кнопок / команд.

1 голос
/ 16 октября 2014

Используя net 5, кажется, это весь код, необходимый для открытия окна ShowDialog и его закрытия.

Из окна, которое вы открыли.

   <Button Margin="10"   IsDefault="True"  Click="Ok_OnClick" >OK</Button>
   <Button  Margin="10" IsCancel="True">Cancel</Button>

    private void Ok_OnClick(object sender, RoutedEventArgs e)
    {
        DialogResult = true;
    }

Из функции, чтобы открытьwindow.

        var requester = new DeleteRequester();// a wpf window       
        var showDialog = requester.ShowDialog( );
        if (showDialog != null && showDialog.Value)

единственная причина, по которой он проверяется на нулевое значение, состоит в том, чтобы избавиться от синей ворчливой линии от повторного повышения резкости.

Кажется, когда вы меняете "DialogResult"собирается закрыть и значение возвращается.В смысле, зачем вам менять значение, если вы еще этого не сделали.

Что бы вы ни делали с окном, вам просто нужно закрыть окно, чтобы вернуть ложный результат, или установить DialogResult.true, чтобы закрыть окно с истинным результатом.

Простой и базовый:

 If(ItWorked){DialogResult = true;}// closes window returns true

 If(ItsJunk){Close();}// closes window returns false
 If(ItsJunk){DialogResult = false;}//closes window returns false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...