C# Alt+;带功能区的wpf富文本框的数字(ASCII码)输入

C# Alt+;带功能区的wpf富文本框的数字(ASCII码)输入,c#,wpf,input,keyboard,ribbon,C#,Wpf,Input,Keyboard,Ribbon,我目前正在从事一个由两部分组成的项目。Ribbon和RichTextBox(System.Windows.Controls.RichTextBox) 我面临一个问题,ASCII代码(例如alt+123是“{”)输入没有得到反映,因为按alt会触发keytip命令。特别是对于Ribbon,有一个由alt+number触发的快速访问工具栏 有什么建议来解决这个问题吗?或者我应该放弃richtextbox的ASCII码输入吗 事先非常感谢 编辑:这就是我正在采取的方法 protected ov

我目前正在从事一个由两部分组成的项目。Ribbon和RichTextBox(System.Windows.Controls.RichTextBox)

我面临一个问题,ASCII代码(例如alt+123是“{”)输入没有得到反映,因为按alt会触发keytip命令。特别是对于Ribbon,有一个由alt+number触发的快速访问工具栏

有什么建议来解决这个问题吗?或者我应该放弃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部分不会命中。 它工作了好几次,让我很兴奋。然而,只有当我破坏代码并动态修改并运行它时,它才起作用。如果我重新编译所有内容并运行程序,它就会恢复到根本不点击代码的原始状态(按键提示弹出)。
感谢您的任何建议。

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

Keyboard.IsKeyDown(Key.LeftAlt)

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

这似乎适用于我刚刚尝试的应用程序:

    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代码,这将非常有帮助。

非常感谢您的回复。我曾考虑过覆盖OnKeyDown。但是,我无法找到成功实现KeyTip行为和输入ASCI的方法我输入。如果以下输入是ASCII码,我只想允许alt输入,而不需要使用alt触发的快捷键。@publicst119您可以改为检查Keyboard.IsKeyDown(Key.NumPad0)等等。然后顶部的数字仍然适用于功能区命令。啊,这肯定允许我专门使用numpad。我一开始只是在按下Alt键并按下numpad键时返回,希望这将在输入完成后接收输入。但是,文本框仍然不允许我输入带有ASCII码Alt的字符有什么建议吗?当您通过重写的KeyDown事件时,是否传递了NumPad键?如果是,您是如何实现e.Handled的?