如何检测KeyDown或KeyUp WPF事件中的方括号?

时间:2013-06-05 13:28:03

标签: c# wpf keyboard wpf-controls

我想检测按键是否会导致WPF ]的{​​{1}}事件中的square bracket KeyDown结束:

Popup

解决方案必须适用于任何键盘布局。请注意,不同布局的关键映射通常会有很大差异。因此,检查正确的组合键(例如德语QWERTZ键盘上的 private void MyPopup_KeyDown(object sender, KeyEventArgs e) { if (theKeyStrokeWouldResultIsAClosingSquareBracket) { // ... // do stuff // ... e.Handled = true; } } 或美国QUERTY键盘上的Ctrl + Alt + Digit 9)是不可能的解决方法。

尽管有这些问题,你怎么能完成这样的检测?


编辑 - 在开始赏金之前添加一些信息:

我目前正在当前的项目中实现类似IntelliSense的功能。 IntelliSense的灵感源于:http://www.codeproject.com/Articles/22803/Intellisense-like-Method-Selection-Pop-up-Window

自定义语法允许使用OemCloseBrackets这样的表达式,其中用户应该能够使智能感知功能自动完成括号中的文本。为了使intellisense函数与Visual Studio(以及许多其他IDE)的行为更相似,我想让用户在弹出的列表框中键入一个结束方括号以强制自动完成。

3 个答案:

答案 0 :(得分:4)

您应该使用PreviewTextInput事件 - 这将获得TextCompositionEventArgs参数,其Text属性将成为结束括号。

答案 1 :(得分:2)

您可以在弹出式窗口中添加透明TextBox,并在其上订阅TextChanged事件,而不是Popup上的事件。

答案 2 :(得分:1)

如果它是一个组合键,我认为你不能使用按键事件捕获它。

if(e.Key == Key.OemCloseBrackets) {

}

是使用英文键盘的简单案例的正确方法。如果您想要处理您所描述的德语键盘,您应该在正在使用键盘事件调用的文本框上进行字符串比较。

if(txtKeypad.Text.Substring(txtKeypad.Text.Length - 1,1)==“]”)

我希望这会有所帮助。