3

我想检测在WPF事件中击键是否会导致右方括号]KeyDownPopup

private void MyPopup_KeyDown(object sender, KeyEventArgs e)
{
    if (theKeyStrokeWouldResultIsAClosingSquareBracket)
    {
        // ...
        // do stuff
        // ...
        e.Handled = true;
    }
}

该解决方案必须适用于任何键盘布局。请注意,不同布局的键映射通常有很大差异。因此,不幸的是,检查正确的组合键(例如Ctrl + Alt + Digit 9在德国QWERTZ键盘上或仅OemCloseBrackets在美国QUERTY键盘上)是没有解决方案的。

尽管存在这些问题,您如何完成这样的检测?


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

我目前正在我当前的项目中实现类似 IntelliSense 的功能。IntelliSense 的东西是受此启发的:http: //www.codeproject.com/Articles/22803/Intellisense-like-Method-Selection-Pop-up-Window

自定义语法允许表达式,例如[abc].[def] > [ghi].[jkl],用户应该能够使智能感知函数自动完成括号中的文本。为了使智能感知功能更类似于 Visual Studio(以及许多其他 IDE)的行为,我想让用户在弹出的列表框中键入右方括号以强制自动完成。

4

3 回答 3

4

您应该使用该PreviewTextInput事件 - 这将获取一个TextCompositionEventArgs参数,其Text属性将是右括号。

于 2013-06-12T09:43:40.520 回答
2

您可以向弹出窗口添加一个透明TextBox的,并订阅该TextChanged事件而不是Popup.

于 2013-06-05T13:57:47.737 回答
1

如果它是一个组合键,我认为您无法使用按键事件来捕获它。

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

}

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

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

我希望这有帮助。

埃德

于 2013-06-05T13:42:42.140 回答