2012-06-06 61 views
3

我有一個WPF應用程序,當第一次按下修改鍵(例如Alt或Control)時需要響應。無論是否有其他按鍵被按下,響應都需要發生,所以我基本上需要能夠告訴當前這些按鍵中的任何一個都關閉了。檢測修飾鍵?

我看到的修飾鍵的事件行爲與其他鍵不同 - 它看起來像KeyDown事件,而PreviewKeyDown事件實際上是在按下按鈕後彈起時觸發的,這沒有什麼幫助。

在深入探討事件觸發問題時,我創建了一個定時後臺循環,用於輪詢所有當前鍵狀態。即使這不起作用---如果我按下修飾鍵,並且我沒有釋放鍵或按任何其他鍵,該輪詢錯誤地說修飾鍵實際上並沒有關閉(無限期地,直到另一個鍵被獲取按下)

我覺得我必須錯過一些基本的東西,但目前還沒有運氣。有任何想法嗎?

+0

檢查雷恩伯恩斯在該線程中的解釋http://stackoverflow.com/questions/3099472/previewkeydown-is-not-seeing-alt-modifiers – nik

回答

0

您是否附加到主窗口實例上的「Keyboard.KeyDown」事件?

<Window x:Class="WpfApplication3.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" Keyboard.KeyDown="Window_KeyDown"> 

</Window> 
+0

是的我已經嘗試附加KeyDown和PreviewKeyDown處理程序。他們正在射擊,而不是當我需要他們時。事件發生時:a)修改鍵在按下後恢復,或b)當鍵盤上的另一個鍵被按下時。只要按下修改器似乎什麼都不做。 – Ryan

+0

我注意到你的原帖是你使用了一個計時器來測試這個,你應該知道WPF計時器是線程安全的,這意味着它不會觸發,直到UI完成執行。試着在你的keydown處理器中放一個MessageBox,看看它何時觸發。 – jimmyjambles

0

事實證明這種行爲是特定於我的環境(在Parallels 6.0 VM運行Windows &的Visual Studio)。 Parallels必須攔截這些事件以保留一些低級別的Mac OS功能。我不確定其他虛擬機設置,但這在本地Windows環境中看起來不是問題。