gpt4 book ai didi

UserControl 中的 WPF InputBinding 在获得焦点之前不起作用

转载 作者:行者123 更新时间:2023-12-03 10:36:26 24 4
gpt4 key购买 nike

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

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

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

如果我在 UserControl 上添加 InputBindings,我必须先在 UserControl 中选择一些东西,然后才能按 F1。

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

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

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

最佳答案

我在这里找到了一个很好的解决方案at SOAdi Lester .他正在使用一种行为将键绑定(bind)从 UserControl 传播到 Window

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

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

关于UserControl 中的 WPF InputBinding 在获得焦点之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26605955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com