Используйте EventTrigger по определенному ключу
Я хотел бы вызвать команду, используя EventTrigger, когда затрагивается конкретный ключ (например, клавиша пробела)
В настоящее время у меня есть:
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<i:InvokeCommandAction Command="{Binding DoCommand}" CommandParameter="{BindingText}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Теперь, как я могу указать, что это должно происходить только тогда, когда KeyDown происходит с помощью пробела?
Ответы
Ответ 1
Вам нужно будет создать настраиваемый триггер, чтобы обработать это:
public class SpaceKeyDownEventTrigger : EventTrigger {
public SpaceKeyDownEventTrigger() : base("KeyDown") {
}
protected override void OnEvent(EventArgs eventArgs) {
var e = eventArgs as KeyEventArgs;
if (e != null && e.Key == Key.Space)
this.InvokeActions(eventArgs);
}
}
Ответ 2
Другим подходом будет использование KeyBindings и привязка их к вашему окну, UserControl, FrameworkElement и т.д. Это не приведет к запуску кнопки, но скажите, что у вас есть команда "MyCommand", которая вызывается с помощью кнопки, вы можете вызвать команды из InputBindings.
<UserControl.InputBindings>
<KeyBinding Command="{Binding Path=ApplyCommand}" Key="Enter"/>
<KeyBinding Command="{Binding Path=NextPage}" Modifiers="Ctrl" Key="Left"/>
</UserControl.InputBindings>
<StackPanel>
<Button IsDefault="True" Content="Apply">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding Path=ApplyCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
Вы также можете привязать эти KeyBindings к TextBox.