1

私は現在、2 つのコンポーネントを持つプロジェクトに取り組んでいます。リボンと RichTextBox (System.Windows.Controls.RichTextBox)。

Alt キーを押すとキーチップ コマンドがトリガーされるため、ASCII コード (例: alt+123 は '{') の入力が反映されないという問題に直面しています。特にリボンでは、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 セクションはヒットしません。それは数回機能し、私を興奮させました。ただし、コードを壊してオンザフライで変更して実行した場合にのみ機能していました。すべてを再コンパイルしてプログラムを実行すると、コードにまったくヒットしない (KeyTip がポップアップする) 元の状態に戻ります。どんな提案でも大歓迎です。

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 に答える