2

私のWPFアプリでは、aが開いているときに、キーが押されContextMenuているかどうかに応じてメニュー項目を微調整したいと思います。Alt

ロジックが機能しています。XAML:

<my:Control ContextMenuOpening="MyContextMenu_Opening" />

コード:

private void MyContextMenu_Opening(object sender, RoutedEventArgs args) {
  bool isAltDown = Keyboard.IsKeyDown(Key.LeftAlt);
  /* tweak menu items here */
}

私の問題は、Altキーを押すと、コンテキストメニューが開き、すぐに閉じることです(開いているフラッシュで、ロジックが少なくとも機能していることがわかります)。

これは一般的にWPFの「機能」なのだろうか。Alt右クリックしてTextFieldも同じことが起こるからです。組み込みの[切り取り/コピー/貼り付け]メニューが点滅して開き、すぐに閉じます。

Alt1つの勘は、アプリケーションのメニューバーをアクティブにすることと関係があるということです。しかし、アプリケーションのメニューバーは私の状況には当てはまらないので、解決策がそれをいじることを伴う場合でも、それは私にとってはうまくいきます。

4

3 に答える 3

3

これは、MenuBaseクラスに組み込まれている動作です。

        protected override void OnKeyDown(KeyEventArgs e)
        {
            .....
            if (((e.SystemKey == Key.LeftAlt) || (e.SystemKey == Key.RightAlt)) || (e.SystemKey == Key.F10))
            {
                this.KeyboardLeaveMenuMode();
                e.Handled = true;
            }
        }

別の修飾キーを使用してみませんか?

于 2013-03-06T13:10:01.650 に答える
1

これは、MSDNMenuBase.OnKeyDownの組み込みの動作です。

    If the user presses ESC, ALT+ALT, or ALT+F10, 
    this implementation marks the KeyDown event as handled 
    by setting the Handled property of the event data to true.
于 2013-03-06T13:25:08.447 に答える
0

Altキーを引き続き使用でき、基本クラスの動作をオーバーライドするだけです。

public class AltProofContextMenu : ContextMenu
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if(!(e.SystemKey == Key.LeftAlt || e.SystemKey == Key.RightAlt))
            base.OnKeyDown(e);
    }
}
于 2018-11-29T16:55:38.203 に答える