我有一个WPF屏幕,有六个按钮。我想将每个与键绑定相关联。它们都是通过MVVM驱动的ICommand。
我目前有绑定事件的键绑定,而不是实际按钮:
<UserControl.InputBindings>
<KeyBinding Key="N" Command="{Binding MyCommand}"/>
然而,对于任何Keybinding工作,我必须设置至少1个按钮来关注代码隐藏。我真的不喜欢这样做,因为每个按钮/命令都有不同的规则,如果它是否有效,我有焦点动画,我更喜欢在页面加载时不活动。
这可能还是我必须设置焦点?
答案 0 :(得分:13)
你只需要将usercontrol的focusable设置为true,因为某些元素默认情况下不会为true
<UserControl Focusable="True">
然后你必须在用户控件的加载事件中设置this.Focus()
答案 1 :(得分:1)
可能你需要专注于一些元素才能使它工作,但也许你可以在没有视觉反馈的情况下将注意力集中在整个UserControl上?如果不起作用,您也可以尝试将焦点设置为不可见元素。
顺便说一句,此前似乎有一个类似的问题: WPF MVVM KeyBinding not being recognized right away and not always working答案 2 :(得分:1)
你是否在一个窗口中托管UserControl ....这就是你可以使用的案例....
<Window x:Class="GM.Powertrain.DOEMenu.ViewLayer.AboutScreen"
Height="460" Width="370"
WindowStartupLocation="CenterScreen"
ShowInTaskbar="False"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ResizeMode="NoResize"
FocusManager.FocusedElement="{Binding ElementName=UserControlName}"
Behaviors:WindowCloseOnEscapePressBehavior.EscapeClosesWindow="True" Behaviors:Help.Filename="Help/DOEMenuHelp.chm" Behaviors:Help.Keyword="About Screen">
<UserControl Name=UserControlName>
<KeyBinding Key="N" Command="{Binding MyCommand}"/>
</UserControl>
</Window>
你的密钥绑定应该这样工作......