2010-11-17 38 views
34

在微軟官方文檔,只有一個段落提控件的行爲,以鍵盤(至少是我能找到):Silverlight 4控件的默認鍵盤行爲是否有參考?

http://msdn.microsoft.com/en-us/library/cc189015(v=VS.95).aspx#inputting_text

文字輸入和控制

某些控制反應鍵盤事件與自己的處理。例如,TextBox是一個控件,用於捕獲並直觀地表示通過使用鍵盤輸入的文本,並且它使用KeyUp和KeyDown在其自己的邏輯中捕獲擊鍵,然後在文本中引發自己的TextChanged事件其實已經改變您通常仍然可以將KeyUp和KeyDown的處理程序添加到TextBox或用於處理文本輸入的任何相關控件。但是,作爲預期設計的一部分,控件可能不會響應通過關鍵事件指向它的所有關鍵值。行爲特定於每個控件。作爲一個例子,ButtonBase(Button的基類)處理KeyUp,以便它可以檢查SPACEBAR或ENTER鍵,爲了引發Click事件,它被認爲相當於鼠標左鍵按下。該事件的處理由ButtonBase覆蓋虛擬方法OnKeyUp來完成,並且在其實現中它設置Handled = true。結果是,在SPACEBAR的情況下偵聽鍵事件的按鈕的任何父母將不會接收其自己的處理程序的已處理事件。另一個例子是TextBox。某些鍵(如ARROW鍵)不被TextBox視爲文本,而是被視爲特定於控件UI行爲,TextBox將這些事件案例標記爲已處理。

通過重寫OnKeyDown/OnKeyUp,自定義控件可以爲關鍵事件實現自己的類似重寫行爲。如果您的自定義控件處理特定的加速鍵,或者具有與TextBox所描述的場景類似的控件或焦點行爲,則應該將此邏輯放在您自己的OnKeyDown/OnKeyUp覆蓋中。

是否有更完整的參考?

例如在AutoCompleteBox可以導航到建議按上/下,選擇一個按壓進入,等等等等

完全可以有不是集中的每一個控制和壓在每一個關鍵的一個更好的辦法鍵盤找出:)

+0

也許這將有助於.... HTTP:// WWW。 dummies.com/how-to/content/silverlight-4-for-dummies-cheat-sheet.html – Aeonius 2011-05-12 17:04:12

回答

1

看在源代碼\反射器。

在控制文本處理中有許多怪癖,我懷疑任何人都會在意這些。例如,當用戶在控件內部存在文本時按下BackSpace時,TextBox的KeyDown事件不會被觸發,但在沒有文本時觸發。等等。

我已經想出了一個很好的規則:如果由於某種原因,您需要知道某些控件的行爲方式是否會浪費您試圖編碼(重現)這種情況的時間,只需獲取Reflector並查看源代碼。

+0

我將此標記爲已接受的答案,因爲迄今爲止這是最穩健的方式,但我暗中希望有至少有一些羣衆來源的參考... :) – dain 2011-10-15 11:01:14