DialogResult WPF

时间:2010-12-27 06:34:09

标签: wpf

我正在读一本书,上面写着

  

而不是设置DialogResult   用户点击后用手   按钮,你可以指定一个按钮   接受按钮(通过设置   IsDefault为true)。点击它   按钮自动设置   DialogResult的窗口为true。   同样,您可以指定一个按钮   作为取消按钮(通过设置   IsCancel为true),在这种情况下   单击它将设置DialogResult   取消。

这是MainWindow:

<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 个答案:

答案 0 :(得分:7)

  

IsDefault将按钮与Enter键绑定,以便按Enter键将触发Click事件。这并不意味着对话框将为DialogResult返回true。

请参阅链接。它将为您清理事情

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

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

希望它有所帮助...

答案 1 :(得分:6)

将您的代码更改为

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 :(得分:2)

据我所知,将IsDefault设置为true并将IsCancel设置为false只允许您指定应发生的事件,即窗口将在IsCancel的'Escape'键和IsDefault =的Enter键上触发关闭事件。

您需要设置按钮单击/命令操作处理程序的对话框结果。

答案 3 :(得分:1)

使用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;
    }

从功能到打开窗口。

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

检查null的唯一原因是从re-sharper中删除蓝色唠叨线。

似乎每当你改变&#34; DialogResult&#34;窗口将关闭并返回值。有道理,如果你没有完成,为什么要改变价值。

使用窗口进行操作时,只需关闭窗口以返回错误结果,或者将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