2013-04-11 45 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

相关问题