UserControl中的WPF输入绑定在聚焦之前不起作用

时间:2014-10-28 10:27:54

标签: wpf mvvm input

我有一个MainView(Window)作为shell,当用户导航应用程序时,我在其中加载包含不同“页面”或“视图”的不同UserControl。

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

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

如果我在UserControl上添加InputBindings,我必须先选择UserControl中的内容才能点击F1。

如果我在Window上添加InputBindings,我没有正确的DataContext(ViewModel)。我甚至尝试将CommandTarget设置为ViewModel的属性

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

我还尝试在MainWindow上设置FocusManager.FocusedElement =“{Binding ElementName = ContentControl}”,在UserControl甚至ContentControl上设置Focusable = true。

1 个答案:

答案 0 :(得分:1)

我在at SO Adi Lester找到了一个很好的解决方案{{3}}。他正在使用行为将键绑定从UserControl传播到Window

我发现如果你在generic.xaml中使用泛型contenttemplate中的行为,你必须通过TemplatedParent而不是TemplateBinding来绑定命令

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