Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 没有任何焦点的键绑定_Wpf_Xaml_C# 4.0_Mvvm - Fatal编程技术网

Wpf 没有任何焦点的键绑定

Wpf 没有任何焦点的键绑定,wpf,xaml,c#-4.0,mvvm,Wpf,Xaml,C# 4.0,Mvvm,我有一个WPF屏幕,有六个按钮。我想将每个都与一个键绑定相关联。它们都是通过MVVM驱动的ICommand 我目前将KeyBinding绑定到事件,而不是实际按钮: <UserControl.InputBindings> <KeyBinding Key="N" Command="{Binding MyCommand}"/> 然而,要使任何键绑定工作,我必须在代码隐藏中设置至少1个按钮来聚焦。我真的不想这样做,因为每个按钮/命令都有不同的规则来决定它

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

我目前将KeyBinding绑定到事件,而不是实际按钮:

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

然而,要使任何键绑定工作,我必须在代码隐藏中设置至少1个按钮来聚焦。我真的不想这样做,因为每个按钮/命令都有不同的规则来决定它是否处于活动状态,并且我希望在页面加载时焦点动画不处于活动状态


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

可能您确实需要关注某个元素才能使其工作,但也许您可以在没有视觉反馈的情况下对整个用户控件设置焦点?如果不起作用,也可以尝试将焦点设置为不可见元素

顺便说一句,以前这里似乎也有类似的问题:

您只需要将usercontrol的focusable设置为true,因为某些元素在默认情况下没有设置为true

<UserControl Focusable="True">


然后必须在用户控件的加载事件中设置此.Focus()

是否在窗口中托管用户控件。。。。这就是你可以使用的情况

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


您的键绑定应该以这种方式工作…

Hmm。。是的,我正在使用contentcontrol并通过prism区域插入usercontrol。但是我尝试在窗口和usercontrol上设置usercontrol作为焦点,但没有成功。我可以尝试一个小的测试项目并使用这种方法。我很惊讶FocusManager.FocusedElement=“{Binding RelativeSource={RelativeSource Self}}}在实际的用户控件中不起作用。但是设置这个。Focus()确实有效。完美!我希望adcool2007的方法能起作用,那么我就不会打开代码隐藏了。你仍然可以在xaml中完成。使用System.Windows.Interaction和:Expression.Samples.Interaction效果很好,谢谢!让我们不要过分纠结于不使用代码隐藏。在这种情况下它是严格意义上的UI,这就是它的归属(尽管上面的interaction.triggers也不错,但我只是在需要在viewmodel中运行命令时使用它们)。