Как создать горячую клавишу для кнопки, изменив 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");
}