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