2013-04-11 71 views
2

我想在用戶在我的應用程序中的任何位置開始輸入時給出文本框焦點。將焦點放在按鍵上的文本框

我的頁面從LayoutAwarePage繼承。

這可以實現嗎?

編輯: 我得到這個代碼:

// In constructor 
    Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown; 

    // Somewhere else in class 
    void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args) 
    { 
     this.setSearchboxFocus((int)args.VirtualKey); 
    } 

    private void setSearchboxFocus(int keyCode) 
    { 
     if (keyCode == 38) 
      return; 

     if (keyCode == 40) 
      return; 

     if (this.searchBox.FocusState == Windows.UI.Xaml.FocusState.Unfocused) 
     { 
      this.searchBox.Text = ""; 
      this.searchBox.Focus(Windows.UI.Xaml.FocusState.Keyboard); 
     } 
    } 

回答

1

Fo任何人在將來閱讀此主題時,都是因爲webview。我問了一個關於msdn forum here的類似問題。從Windows 8.1開始,webview被作爲一個單獨的窗口實現,當它擁有焦點時,完全竊取所有的鍵盤輸入,而不會將其傳遞給控制應用程序。如果您可以更改被調用網站中的HTML,則可以使用JavaScript偵聽器在應用程序和webview之間傳遞事件,但我沒有親自測試。不幸的是,目前似乎沒有任何其他解決方法。

0

怎麼這樣呢?

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (!textBox1.Focused) 
    { 
     textBox1.Focus(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+0

我似乎無法找到任何ProcessCmdKey從Page覆蓋。 – 2013-04-11 16:33:25

0

這可能有助於

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
textBox1.Focus();//sets focus to textBox1 when user presses a key on form 
} 
+0

好吧。我沒有表格?我有一個頁面。 – 2013-04-11 16:33:08

0

如何,在Windows.UI.Xaml.Controls.Page:

protected override void OnKeyDown(KeyRoutedEventArgs e) 
    { 
     textBox1.Focus(Windows.UI.Xaml.FocusState.Keyboard); 
     base.OnKeyDown(e); 
    } 
+0

我試過這個結果不一。是否因爲我在網頁上也有一個webview? – 2013-04-11 17:07:34

1

您可以處理整個在KeyDown/KeyUp事件通過訂閱這些事件頁面

Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown; 
Window.Current.CoreWindow.KeyUp += CoreWindow_KeyUp 
+0

我試過這個結果不一。不能這樣做,因爲我在頁面上也有一個webview? – 2013-04-11 17:08:09

+0

你是什麼意思的混合結果? – Xyroid 2013-04-11 17:11:05

+0

它隨機工作:o – 2013-04-11 17:13:30

相關問題