微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以获得特定命令的任何“活动”命令绑定?

如何解决是否可以获得特定命令的任何“活动”命令绑定?

我们有一个案例,我们有两个外部定义的 RoutedUICommand 对象(即我们不拥有它们,因此我们无法更改它们),它们预先连接到相同的 CTRL+N 键绑定。我们可以在我们的代码中通过手动设置我们想要的 InputBindings解决这个问题,就像这样(注意:AddMany 是我的方便扩展,它需要一个参数数组):

private void InitializeCommands(){

    // Both NewFooCommand and NewLaaCommand define CTRL-N as their shortcut,// so we have to explicitly assign the shortcuts we want for each
    // Note: You should explicitly specify both as the system may 'choose' the wrong one to
    // handle the default case.  i.e. we can't just specify NewLaaCommand for the new shortcut
    // because the system may also wire up CTRL+N to NewLaaCommand so it would Now respond to
    // both shortcuts while NewFooCommand Now wouldn't respond to either.

    InputBindings.AddMany(
        new InputBinding(NewFooCommand,new KeyGesture(Key.N,ModifierKeys.Control)),new InputBinding(NewLaaCommand,ModifierKeys.Control | ModifierKeys.Alt))
    );

    CommandBindings.AddMany(
        new CommandBinding(NewFooCommand,(s,e) => MessageBox.Show("New Foo!")),new CommandBinding(NewLaaCommand,e) => MessageBox.Show("New Laa!"))
    );
}

这很好用并且解决了我们问题的那一部分,因此我们现在可以使用我们认为合适的快捷方式。

我们仍在努力解决的问题是我们为按钮提供了全局样式,这些样式会自动应用其工具提示显示其分配的快捷键。它基于命令本身的指定内容在这种情况下当然是 CTRL+N 所以这就是它们都显示内容,即使现在是 CTRL +ALT+N 感谢手动指定的 InputBinding

现在,虽然我们可以四处走动并对工具提示进行硬编码,但我想知道是否有办法而不是询问命令绑定/绑定是什么,如果我们可以以某种方式查询系统以查看哪个当前的键绑定相对于给定的控件(即按钮)有效。但是,我不确定如何获取该信息而不必手动遍历可视化树搜索 InputBinding 集合以获取特定的 {{1 }}。

是否可以询问输入系统实际上哪个键绑定有效,而不仅仅是在 RoutedUICommand 上定义了哪个?

“hack”替代方法是使用正确的键绑定定义我们自己的“镜像”命令,以便样式正确更新工具提示,然后我们只需将大多数操作委托给实际命令。就像我说的,这是一个黑客,但它会起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。