没有任何焦点的键绑定

时间:2011-11-14 22:11:24

标签: wpf xaml c#-4.0 mvvm

我有一个WPF屏幕,有六个按钮。我想将每个与键绑定相关联。它们都是通过MVVM驱动的ICommand。

我目前有绑定事件的键绑定,而不是实际按钮:

<UserControl.InputBindings>
        <KeyBinding Key="N"  Command="{Binding MyCommand}"/>

然而,对于任何Keybinding工作,我必须设置至少1个按钮来关注代码隐藏。我真的不喜欢这样做,因为每个按钮/命令都有不同的规则,如果它是否有效,我有焦点动画,我更喜欢在页面加载时不活动。

这可能还是我必须设置焦点?

3 个答案:

答案 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>

你的密钥绑定应该这样工作......