回答:
クラスを使用しKeyboard
ます。を使用しKeyboard.IsKeyDown
て、Ctrl、Shift、Altが現在ダウンしているかどうかを確認できます。
シフトの場合:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
コントロール:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Altの場合:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
またあります:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
Keyboard.Modifiers == ModifierKeys.Shift
ステートメントを使用します。Shiftキーをキャッチしたいが他の修飾子が同時に押されても気にしない場合は、(Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
HasFlag構文またはそれ以上の構文を使用してくださいKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow
。
Keyboard.Modifiers
ように表示None
private bool IsShiftKey { get; set; }
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;
if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
{
e.Handled = true;
}
}
これが(PreviewKeyDownを使用して)処理する方法です。たとえば、Alt + Rを探しているとします...
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
&& e.SystemKey == Key.R)
{
//do whatever
}
}
多分修飾子が原因で、なぜe.Keyだけでなくe.SystemKeyを使用しなければならなかったのか、誰かが解決できるかもしれません。しかし、修飾子+キーを検索するときに、これは完璧に機能しました。
@Joshから一部借用し、@ Krushikにいくらか類似しており、KeyEventArgs.systemKeyとKeyEventArgs.Keyの違いに関する質問も参照しています(JoshがSystemKeyを使用する必要がある理由に回答)。ここで、修飾キー(Altなど)を使用すると、e.KeyはKey.Systemを返すため、「実際の」キーはe.SystemKey内にあります。
これを回避する方法は、最初に「実際の」キーをフェッチしてから、条件を実行することです。
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
// Fetch the real key.
var key = e.Key == Key.System ? e.SystemKey : e.Key;
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
&& key == Key.Return)
{
// Execute your code.
}
}
(e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
、他のすべてのものの代わりにチェックするだけです...