ユーザーが矢印キーを押して移動できるWPFウィンドウがあります。KeyDownイベントにフックすることでこれを行いました:
<Window ... KeyDown="Window_OnKeyDown">
矢印キーを1回押すと、ウィンドウが1ピクセル移動します。明らかに、これはかなり遅いので、ユーザーがShiftキーを押したままにして、ウィンドウを一度に5ピクセルずつ速く移動できるようにします。
private void Window_OnKeyDown(object sender, KeyEventArgs e)
{
var key = e.Key;
var pixelAmount = e.KeyboardDevice.Modifiers == ModifierKeys.Shift ? 5 : 1;
switch (key)
{
case Key.Up:
Top = Top - pixelAmount;
break;
case Key.Down:
Top = Top + pixelAmount;
break;
case Key.Left:
Left = Left - pixelAmount;
break;
case Key.Right:
Left = Left + pixelAmount;
break;
}
}
このコードは、ユーザーがShift矢印キーを押してから押すとうまく機能します。問題は、ユーザーが最初に矢印キーを押したまま、を押しShiftて移動を高速化した場合、これは機能しないことです。これは、これがWindow_OnKeyDown()
アクティブShiftキーであると見なされ、switchステートメントが既に押された矢印キーではなくShiftキーに対して実行されるためです。誰かが私がこの振る舞いを修正する方法を知っていますか?