天天看點

Windows 8 鍵盤上推自定義處理

  在Windows 8 應用程式中,當TextBox控件獲得焦點時,輸入面闆會彈出,如果TextBox控件處于頁面下半部分,則系統會将頁面上推是的TextBox不被輸入面闆蓋住,但是當TextBox是在FlipView控件中時,系統不會将頁面上推,是以這種情況下輸入框被輸入面闆蓋住。具體原因不清楚,不知道是不是系統bug。

  當輸入面闆彈出,頁面上推的操作可以通過監聽InputPane的Showing和Hiding事件來處理,既然當TextBox在FlipView控件時,系統沒有很好的處理頁面上推,那麼開發者可以通過監聽InputPane的事件來自己處理上推操作。

  Windows 8 的一個執行個體代碼Responding to the appearance of the on-screen keyboard sample中介紹了如果監聽處理InputPane的相關操作,參考此執行個體以FlipView中的TextBox控件為例并對執行個體代碼進行簡化處理。

  執行個體中的InputPaneHelper是對InputPane的事件處理的封裝,直接拿來使用,InputPaneHelper代碼如下:

Windows 8 鍵盤上推自定義處理
Windows 8 鍵盤上推自定義處理

InputPaneHelper

  InputPaneHelper代碼比較容易了解,簡單的說就是用一個Hash表存儲所有需要監聽處理鍵盤上推事件的UIElement(一般情況下應該是TextBox控件),并且通過監聽UIElement的焦點事件來判斷彈出輸入面闆是通過那個UIElement觸發的,并且通過監聽InputPane的Showing和Hiding事件來對鍵盤上推進行處理。

  測試頁面KeyboardPage.xaml代碼如下:

Windows 8 鍵盤上推自定義處理
Windows 8 鍵盤上推自定義處理

KeyboardPage.xaml

  MoveMiddleOnShowing和MoveMiddleOnHiding分别是定義的鍵盤上推和隐藏時的動畫,此動畫作用在Grid上,當輸入面闆顯示和隐藏時對Grid做此兩種動畫偏遠而達到鍵盤上推的效果。

  測試代碼KeyboardPage.xaml.cs如下:

Windows 8 鍵盤上推自定義處理
Windows 8 鍵盤上推自定義處理

KeyboardPage.xaml.cs

  測試用例中在FlipView的三個item中分别放置一個TextBox,其中textbox0和textbox2是自定義處理鍵盤上推事件,而textbox1是由系統處理,通過運作程式可以發現textbox1觸發彈出鍵盤不會使頁面上推。而textbox0觸發彈出鍵盤有自定義處理,會使頁面上推。

繼續閱讀