1

我目前正在开发一个包含两个组件的项目。功能区和 RichTextBox (System.Windows.Controls.RichTextBox)。

我面临一个问题,即 ASCII 代码(例如 alt+123 是 '{')输入没有得到反映,因为按下 Alt 会触发键提示命令。特别是使用 Ribbon,有一个由 Alt + 数字触发的快速访问工具栏。

有什么建议可以解决这个问题吗?或者我应该放弃 Richtextbox 的 ASCII 码输入吗?

非常感谢您提前。

编辑:这是我正在采取的方法

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.NumPad0 ||
            e.Key == Key.NumPad1 ||
            e.Key == Key.NumPad2 ||
            e.Key == Key.NumPad3 ||
            e.Key == Key.NumPad4 ||
            e.Key == Key.NumPad5 ||
            e.Key == Key.NumPad6 ||
            e.Key == Key.NumPad7 ||
            e.Key == Key.NumPad8 ||
            e.Key == Key.NumPad9)
        {
            if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
                return;
            if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
                return;
        }

        base.OnKeyDown(e);
    }

Ctrl 部分会在调试时命中,但 Alt 部分不会命中。它工作了几次,让我兴奋。但是,只有当我破坏代码并即时修改并运行它时,它才有效。如果我重新编译所有内容并运行程序,它就会回到根本不点击代码的原始状态(弹出键提示)。任何建议表示赞赏。

4

2 回答 2

0

我认为您最好的选择是覆盖KeyDown事件。当您评估e.Key时,请确保在您的 IF 语句中额外评估以下内容:

Keyboard.IsKeyDown(Key.LeftAlt)

Keyboard.IsKeyDown提供了一种查看当前击键涉及哪些修饰符的方法。

于 2012-07-14T18:25:08.750 回答
0

这似乎适用于我刚刚拼凑起来尝试的应用程序:

    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.NumPad0 ||
            e.Key == Key.NumPad1 ||
            e.Key == Key.NumPad2 ||
            e.Key == Key.NumPad3 ||
            e.Key == Key.NumPad4 ||
            e.Key == Key.NumPad5 ||
            e.Key == Key.NumPad6 ||
            e.Key == Key.NumPad7 ||
            e.Key == Key.NumPad8 ||
            e.Key == Key.NumPad9)
            {
                if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
                {
                    e.Handled = true;
                    return;
                }
            }

        base.OnKeyDown(e);
    }

如果您仍在苦苦挣扎,我们可能需要查看更多代码 - 如果您可以使用相同的原理创建一个简单的应用程序并为我们提供 XAML 代码,它会有所帮助。

于 2012-07-15T09:11:49.333 回答