【发布时间】:2013-06-01 05:31:16
【问题描述】:
我想检测击键是否会导致在 WPF Popup 的 KeyDown 事件中关闭 square bracket ]:
private void MyPopup_KeyDown(object sender, KeyEventArgs e)
{
if (theKeyStrokeWouldResultIsAClosingSquareBracket)
{
// ...
// do stuff
// ...
e.Handled = true;
}
}
该解决方案必须适用于任何键盘布局。请注意,不同布局的键映射通常差异很大。因此,不幸的是,检查正确的组合键(例如德国键盘上的QWERTZ 键盘上的Ctrl + Alt + Digit 9 或美国QUERTY 键盘上的简单OemCloseBrackets)是没有解决办法的。
尽管存在这些问题,您如何完成这样的检测?
编辑 - 在开始赏金之前添加一些信息:
我目前正在我当前的项目中实现类似 IntelliSense 的功能。 IntelliSense 的灵感来自于:http://www.codeproject.com/Articles/22803/Intellisense-like-Method-Selection-Pop-up-Window
自定义语法允许像[abc].[def] > [ghi].[jkl] 这样的表达式,用户应该能够让智能感知函数自动完成括号中的文本。为了使智能感知功能更类似于 Visual Studio(以及许多其他 IDE)的行为,我想让用户在弹出的列表框中键入右方括号以强制自动完成。
【问题讨论】:
-
你试过
if (e.KeyCode == Keys.OemCloseBrackets)吗? -
是的。但是,正如我在问题中所写,这是特定于美国 QWERTY 布局(和类似布局)的,并且在这方面不适用于与该键盘不同的其他布局。
-
也许您应该监听 TextInput 而不是尝试处理 KeyDown,这样您就不需要处理键盘翻译。
标签: c# wpf keyboard wpf-controls