C# 如何在同样适用于宿主窗口或应用程序其余部分的用户控件中注册命令
我正在编写一个用户控件,我需要定义“热键”。例如,可以使用Ctrl+S将控件布局保存为位图。但它们应该是全球应用程序。C# 如何在同样适用于宿主窗口或应用程序其余部分的用户控件中注册命令,c#,wpf,keyboard-shortcuts,key-bindings,C#,Wpf,Keyboard Shortcuts,Key Bindings,我正在编写一个用户控件,我需要定义“热键”。例如,可以使用Ctrl+S将控件布局保存为位图。但它们应该是全球应用程序。 我发现我可以在我的用户控件中定义如下命令: <UserControl.InputBindings> <KeyBinding Command="{Binding ExitCommand}" Key="{Binding ExitCommand.GestureKey}" Modifiers="{Binding ExitCommand.Gest
我发现我可以在我的用户控件中定义如下命令:
<UserControl.InputBindings>
<KeyBinding Command="{Binding ExitCommand}"
Key="{Binding ExitCommand.GestureKey}"
Modifiers="{Binding ExitCommand.GestureModifier}" />
绑定来自我自己的命令对象,它可以工作。但仅在控件中(或如果它有焦点)。我如何声明同样适用于全球托管应用程序的内容?
或者如果不是在xaml中,我可以在不了解应用程序其余部分的情况下编写代码吗?
或者这只能从应用程序级别完成吗?如果热键是全局的,我认为在UserControl中定义它们不是一个好主意。我知道这不是最明智的想法,但用户控件实际上没有视觉焦点。用户可以在附加的配置框中设置热键(因此在用户控件内部)。因此,要么它正在捕捉应用程序中的键,要么用户很难将焦点转移到用户控件上。但是说了这句话,再想想你的评论:我可能会将应用程序中的设置类交给控件,控件可以在其中注册热键。然后我必须用代码进行键盘绑定。但是应用程序可以管理热键,以防超过用户控件的热键。我同意@MehrzadChehraz的评论。组件甚至想要全局强制应用程序上的快捷键,这是一种糟糕的形式,更不用说实际这样做了。如果您选择的密钥与应用程序合法希望它执行的其他操作发生冲突,该怎么办?我想,对于全局行为,最好只公开
ICommand
对象(例如作为静态字段,一个laApplicationCommands
),并让应用程序使用KeyBinding
设置快捷键。这是我想与产品所有者讨论的一个要求。但说“我知道怎么做,但我建议不要这样做”总比说“我不知道怎么做,但我们无论如何都不应该这样做”要好。所以这个问题也是为了我的知识和论点,如果可能的话。如果根本不可能,那也没关系。这是对这个问题的回答。那么我可以说这是不可能的。