Как закрыть окно WPF (диалоговое окно) при нажатии клавиши Enter?

У меня есть окно WPF , которое открывается как модальное диалоговое окно.

В диалоговом окне у меня есть кнопки OK и Отмена со свойствами 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 на клавиатуре (даже если фокус не на Отмена кнопку), диалоговое окно закрывается, как ожидалось. Однако, когда я нажимаю клавишу Enter , когда фокус НЕ находится на кнопке OK , ничего не происходит.

У меня есть DataGrid в диалоговом окне. Я хочу закрыть диалоговое окно, когда я выбираю любую строку в сетке данных и нажимаю клавишу ВВОД.

Как это сделать?

Дополнительная информация: у меня есть текстовое поле в диалоговом окне. И у него есть обработчик события Keyboard.PreviewKeyDown . Когда я нахожусь в текстовом поле и нажимаю клавишу ВВОД, диалоговое окно не должно закрываться. Но я могу удалить этот обработчик. Важно решить вышеуказанный вопрос.

private void tbxSearchString_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        this.Search(); // Does some searching
    }
}
8
задан H.B. 22 September 2011 в 06:00
поделиться