У меня есть 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
), диалоговое окно закрывается, как и ожидалось. Однако, когда я нажимаю клавишу Enter
, когда фокус НЕ на кнопке OK
, ничего не происходит.
У меня есть DataGrid
в диалоговом окне. Я хочу закрыть диалоговое окно, когда я выбираю любую строку в сетке данных и нажимаю ввод.
Как это сделать?
Некоторая дополнительная информация: у меня есть текстовое поле в диалоговом окне. И у него есть обработчик события Keyboard.PreviewKeyDown
. Когда я нахожусь в текстовом поле и нажимаю ввод, диалоговое окно не должно быть закрыто. Но я могу удалить этот обработчик. Важно решить поставленный выше вопрос.
private void tbxSearchString_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
this.Search(); // Does some searching
}
}