2009-08-21 59 views
2

背景:我有一個應用程序,我希望能夠捕獲鍵盤事件。在主屏幕上,用戶點擊一個開始按鈕。在遊戲過程中,「開始」按鈕消失,顯示一個「重置」按鈕(兩個控件上的可見性更改)。這些是唯一的兩個標準控件,因爲所有其他都是不可聚焦的用戶控件。在Silverlight中捕獲關鍵事件

問題:當用戶點擊開始(從而給它聚焦),然後它隱藏和重置出現,重置按鈕自動似乎獲得焦點。這不是很糟糕,因爲重要的新聞事件仍然存在,但重點導致了一個大問題。如果用戶按下空格,則該按鈕將其解釋爲Click事件。

如果我將KeyUp和KeyDown的句柄添加到按鈕本身並將事件設置爲Handled,那麼如果我按住空格並放開,則會吞下該事件,但如果我只是輕點它,則不會。

問題:如何防止空間激活按鈕,同時仍然能夠響應我的應用程序中的空間?

回答

1

考慮創建一個簡單的自定義控件,或者使用一個可以設置爲IsHitTestVisible="True"的控件。然後,將它放置在同一個Grid中的某個位置,並與您想要捕獲的關鍵事件和其他輸入事件掛鉤。

爲了確保焦點轉到您的「隱形」控件,您可以在按下「開始」按鈕後調用(yourControlsNameHere).Focus()

您可以用視覺/標籤爲了工作,要麼把你隱藏,重點捕捉 Reset按鈕控制之前。我不認爲你的用戶會介意圍繞應用程序選項卡讓他們把焦點放在它們輸入相關的非可聚焦用戶控件上。

+0

謝謝!這就是我所做的。唯一的副作用是,我似乎無法使用空格鍵,因爲Windows使用它來創建Click事件。爲了解決這個問題,我只連接了點擊事件處理程序。爲了簡單起見,我創建了一個標準按鈕,它具有零大小的邊框和按Tab鍵順序排列的按鈕後的1x1大小。由於空格鍵/點擊事件的怪異性,您無法按住空格鍵來接收多個事件(無論如何),但在我的應用程序中並不算太糟糕。 非常感謝您的回覆! – 2009-08-24 20:22:46