【发布时间】:2013-02-02 12:41:27
【问题描述】:
我有一个 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 后跟箭头键,则此代码效果很好。问题是,如果用户先按住箭头键,然后按 Shift 来加快移动速度,这将不起作用。这是因为Window_OnKeyDown() 现在认为 Shift 是活动键,并且 switch 语句是针对 Shift 键而不是已经按下的箭头键运行的。有谁知道我该如何解决这个问题?
【问题讨论】:
标签: wpf keyboard keyboard-events