我有一个 WPF window
,它作为模态对话框打开。
在对话框上,我有一个 OK
和一个 Cancel
按钮,它们的 IsDefault
和 IsCancel
属性分别设置为 True
。这两个按钮都有 Click
事件处理程序,用于关闭对话框。
以下是相关的 XAML:
<StackPanel Orientation="Horizontal" Grid.Row="1" Height="45" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="190">
<Button Content="OK"
Height="25" Margin="10,10,10,10" Width="75" Name="btnOK" TabIndex="1600" IsDefault="True" Click="btnOK_Click"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center" />
<Button Content="Cancel"
Height="25" Margin="10,10,10,10" Width="75" Name="btnCancel" TabIndex="1700" IsCancel="True"
VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Click="btnCancel_Click" />
</StackPanel>
这是背后的代码:
private void btnOK_Click(object sender, RoutedEventArgs e)
{
// My some business logic is here
this.Close();
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
当我按下键盘上的 Esc
按钮时(即使焦点不在 Cancel
按钮上),对话框会像预期的那样关闭。然而,当焦点不在 OK
按钮上时,按下 Enter
键不会发生任何事情。对话框中有一个
DataGrid
,我希望在选中数据表格中的任意行并按下 Enter 键时关闭对话框。如何实现这一点?
一些附加信息:对话框中有一个文本框,并且它具有
Keyboard.PreviewKeyDown
事件的事件处理程序。当我在文本框中并按下 Enter 时,对话框不应关闭。但是我可以删除此处理程序,重要的是解决上述问题。private void tbxSearchString_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.Search(); // Does some searching
}
}
DialogResult
设置为true
或false
,并且逻辑应该在打开对话框的代码块中完成,像这样:if ((bool)diag.ShowDialog()) { /*Here*/ }
。 - H.B.DialogResult
)! :) - Learner