我有一个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。
答案 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>