Как создать горячую клавишу для кнопки, изменив xaml?

Я пытаюсь изучить связывание клавиш в WPF на простом примере.

вот мой XAML-файл:

<Window.Resources>
    <RoutedUICommand x:Key="myNewCommand"></RoutedUICommand>
</Window.Resources>

<Window.CommandBindings>
    <CommandBinding Command="{StaticResource myNewCommand}" Executed="Button_Click"></CommandBinding>
</Window.CommandBindings>

<Window.InputBindings>
    <KeyBinding Command="{Binding myNewCommand}" Key="B" />
</Window.InputBindings>

<Grid>
    <Button Command="{Binding myNewCommand}" Click="Button_Click"  Content="Click Here"/>

</Grid>

И это код для Button_Click:

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("hello");
    }

Я получаю сообщение "привет", когда нажимаю на кнопку, но не получаю ответа, когда нажимаю "B" на клавиатуре. Я хочу иметь эту привязку без изменения Button_click. Могу ли я сделать это только в XAML? как?

1 ответ

Ваши командные привязки неверны. Вы должны заменить {Binding myNewCommand} с {Binding Source={StaticResource myNewCommand}}, Также необязательно иметь обработчик Click на кнопке, когда вы уже связали команду.

<Window.Resources>
    <RoutedUICommand x:Key="myNewCommand"/>
</Window.Resources>
<Window.CommandBindings>
    <CommandBinding Command="{StaticResource myNewCommand}"
                    Executed="MyCommandExecuted"/>
</Window.CommandBindings>
<Window.InputBindings>
    <KeyBinding Command="{Binding Source={StaticResource myNewCommand}}" Key="B" />
</Window.InputBindings>
<Grid>
    <Button Command="{Binding Source={StaticResource myNewCommand}}"
            Content="Click Here"/>
</Grid>

Executed обработчик:

private void MyCommandExecuted(object sender, RoutedEventArgs e)
{
    MessageBox.Show("hello");
}
Другие вопросы по тегам