在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 SO由Adi 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>