在UserControl中的WPF InputBinding doesent工作,直到集中

问题描述:

我有一个MainView(窗口)作为一个shell,其中当用户导航应用程序时,我加载包含不同“页面”或“视图”的不同用户控件。在UserControl中的WPF InputBinding doesent工作,直到集中

我通过将ViewModel设置为MainView上的Content属性来更改视图。 DataTemplate根据ViewModel选择正确的视图。

我想使用F1键盘快捷键来触发当前UserControl上的命令。

如果我在UserControl上添加InputBindings,我必须在UserControl中选择一些内容,然后才能点击F1。

如果我在窗口上添加InputBindings,我没有正确的DataContext(ViewModel)。我甚至试图CommandTarget设置的内容属性视图模型

<Window.InputBindings> 
    <KeyBinding Key="F1" CommandTarget="{Binding ElementName=ContentControl}" Command="{Binding ShowInfoCommand}" /> 
</Window.InputBindings> 

我自己也尝试设置FocusManager.FocusedElement =“{绑定的ElementName = ContentControl中}”的主窗口和调焦=在用户控件,甚至ContentControl中真。

我在这里发现了一个很好的解决方案at SOAdi Lester。他正在使用行为将用户控件的键绑定传播到窗口

我发现如果您在generic.xaml中的泛型内容模板中使用该行为,则必须通过TemplatedParent绑定命令而不是TemplateBinding

<Border behaviors:InputBindingBehavior.PropagateInputBindingsToWindow="True"> 
    <Border.InputBindings> 
     <KeyBinding Key="F1" Command="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ShowInfoCommand}" /> 
    </Border.InputBindings> 
</Border>