Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在UserControl中定义键绑定,但是否使它们适用于整个窗口?_Wpf_User Controls_Keyboard Shortcuts_Inputbinding - Fatal编程技术网

Wpf 在UserControl中定义键绑定,但是否使它们适用于整个窗口?

Wpf 在UserControl中定义键绑定,但是否使它们适用于整个窗口?,wpf,user-controls,keyboard-shortcuts,inputbinding,Wpf,User Controls,Keyboard Shortcuts,Inputbinding,有许多键盘快捷键,我希望在应用程序范围内都可以使用,无论当前的焦点在哪里 目前,我已经在主窗口的XAML中定义了。 一切都很好,但是… 功能区封装为一个单独的用户控件,所有快捷方式自然都与该功能区中的按钮相关。 因此,我真的不喜欢在两个类中有两个处理相同功能的应用程序逻辑 理想情况下,我希望将KeyBindings定义为,但是在UserControl中,而不是在窗口中。显然,XAML语法无法做到这一点,但只有-唉,只有当焦点在功能区上时,它们才可用(这意味着永远不可用) 有什么建议吗 谢谢, A

有许多键盘快捷键,我希望在应用程序范围内都可以使用,无论当前的焦点在哪里

目前,我已经在主窗口的XAML中定义了
。 一切都很好,但是…
功能区封装为一个单独的用户控件,所有快捷方式自然都与该功能区中的按钮相关。
因此,我真的不喜欢在两个类中有两个处理相同功能的应用程序逻辑

理想情况下,我希望将KeyBindings定义为
,但是在UserControl中,而不是在窗口中。显然,XAML语法无法做到这一点,但只有
-唉,只有当焦点在功能区上时,它们才可用(这意味着永远不可用)

有什么建议吗

谢谢,
Alex

在控件的构造函数或其Loaded()事件处理程序中,让它找到它所在的窗口(递归使用VisualTreeHelper.GetParent(this),直到GetType为window…),然后将您想要的InputBindings添加到该窗口中。

嗨,Vincent,感谢您的建议。我自己也一直在思考这些问题。。。我仅有的两个反对意见(虽然不太重要)是:1。一般来说,我对爬上可视化树持怀疑态度,因为它破坏了控件的封装(因为它需要对“外部世界”做出某些假设);不过,在这种特殊情况下,功能区可以假定它将有一个窗口驻留在:-)2中。我更喜欢声明式解决方案(即XAML)而不是编程式解决方案(代码隐藏)。。。但是,我想,这是我们能得到的最好的结果:-)哦,还有一个注释:这不能在控件的构造函数中完成(因为调用子控件的构造函数时主窗口还没有完全构造)。因此,它必须在稍后的某个阶段完成,例如在OnApplyTemplate.ok:-)我还想知道是否可以在application.xaml文件中在应用程序级别声明绑定。我想你可以在app.xaml中这样做,以防你遵循默认模式,并在那里设置初始视图但是,如果你使用一些MVVM框架(比如Galasoft),那可能就不那么简单了……你想通过它实现什么呢?在主窗口的XAML中定义它(如中所示)就足够了吗?