非押下キーが押されたときのみ、キー押下イベントを検出したいと考えています。 次に、どの修飾キーが同時に押されたかを知りたいと思います。Altキーを1回押すだけでキー押下を検出する方法
インスタンスの場合:
Shiftキーを押したとき:_______何も出力しません。
Shift + Aを押したとき:_____ "Shift A"を出力したいですか?
私が押しShiftキー+ Altキー+ A:__私は出力 "Shiftキー+ AltキーA"
したいと思い、私は押したときのAlt + A:_______私はしかし、 "AltキーA"
出力したいと思い、 " Shift/Ctrlを押さないと、Keyboard.IsKeyDownでAltキーの押下を検出できないため、「Alt A」は表示されません
以下はテストコードの一部です。
private void Window_KeyDown(object sender, KeyEventArgs e)
{
Key key = e.Key;
if (key.ToString().Contains("Ctrl") | key.ToString().Contains("Shift") | key.ToString().Contains("Alt"))
return;
Label_Test.Content = "";
if (Keyboard.IsKeyDown(Key.LeftShift) | Keyboard.IsKeyDown(Key.RightShift))
{
if (Label_Test.Content.ToString() != "")
Label_Test.Content += "+";
Label_Test.Content += "Shift";
}
if (Keyboard.IsKeyDown(Key.LeftCtrl) | Keyboard.IsKeyDown(Key.RightCtrl))
{
if (Label_Test.Content.ToString() != "")
Label_Test.Content += "+";
Label_Test.Content += "Ctrl";
}
if (Keyboard.IsKeyDown(Key.LeftAlt) | Keyboard.IsKeyDown(Key.RightAlt))
{
if (Label_Test.Content.ToString() != "")
Label_Test.Content += "+";
Label_Test.Content += "Alt";
}
if (Keyboard.IsKeyDown(Key.System))
{
if (Label_Test.Content.ToString() != "")
Label_Test.Content += "+";
Label_Test.Content += "Alt";
}
if (Label_Test.Content.ToString() != "")
Label_Test.Content += " ";
Label_Test.Content += key.ToString();
}
私も
if (e.KeyboardDevice.Modifiers.ToString().Contains("Alt"))
を試みたが、結果は同じでした。 「Alt + A」はどのように検出できますか?
編集:ありがとうございます。私はこのようなKey.Systemをチェックする最後のif文を編集しました。
if (e.Key == Key.System)
{
key = e.SystemKey;
if (e.SystemKey.HasFlag(Key.LeftAlt) | e.SystemKey.HasFlag(Key.RightAlt))
return;
Label_Test.Content = "Alt";
}
MVVMパターンを使用していますか?ジェスチャを入力するためのbinコマンドを使用して、このコードの問題を回避することができます。 –