0
我有一个WPF窗口,允许用户通过按箭头键移动。我已通过挂钩KeyDown事件完成此操作:在WPF中,如何处理在KeyDown事件中按下某个键后按下的修饰键?
<Window ... KeyDown="Window_OnKeyDown">
一次按下箭头键将移动窗口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加速移动。这是因为Window_OnKeyDown()
现在认为Shift是活动键,而switch语句是针对Shift键而不是已经按下的箭头键运行的。有谁知道我可以如何解决这个问题?
嘿马尼什,我已经尝试过这种方式,虽然它的工作原理与预期相同,但在您点击shift键时会有一些延迟。当您按下shift键时,操作系统会将其检测为新按键,然后将按键重复延迟应用于该按键。这会导致窗口立即移动5个像素,然后窗口不会移动,直到按键重复延迟已过。如果您连续按下快速移位,这会导致一种奇怪的行为,只要您在按住箭头键的同时按下shift键,窗口就会移动。 – 2013-02-18 08:35:26
你能得到这个工作吗? – Manish 2013-02-20 19:27:07