我正在读一本书,上面写着
而不是设置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。
答案 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