より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

WPFのKeyDownイベントでKey.Systemとなってしまう場合は、e.SystemKeyで判定

            if ((modifiers & ModifierKeys.Alt) != ModifierKeys.None)
            {
                switch (e.Key)
                {
                    case Key.Up:
                        ShiftUpCommandToolStripMenuItem_Click(null, null);
                        break;
                    case Key.Down:
                        ShiftDownCommandToolStripMenuItem_Click(null, null);
                        break;
                }
            }

上記のようなショートカットキーを書いた場合

f:id:rimever:20210327161027p:plain

と、Key.Upになるはずが、Key.Systemに化けてしまいます。

どーすんのこれ?と思ったのですが、どうやら、e.SystemKeyで取得すればいいようです。

            if ((modifiers & ModifierKeys.Alt) != ModifierKeys.None)
            {
                if (e.SystemKey == Key.Up)
                {
                        ShiftUpCommandToolStripMenuItem_Click(null, null);
                }
                if (e.SystemKey == Key.Down)
                {
                        ShiftDownCommandToolStripMenuItem_Click(null, null);
                }
            }

参考資料

stackoverflow.com