按键时将焦点放在textBox上

时间:2013-04-11 15:46:06

标签: c# microsoft-metro

当用户开始在我的应用中的任何位置输入时,我想给出一个文本框焦点。

我的页面继承自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);
        }
    }

5 个答案:

答案 0 :(得分:1)

您可以通过订阅这些事件来处理整个页面的KeyDown / KeyUp事件

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

答案 1 :(得分:1)

对于将来阅读此主题的人来说,这是因为webview。我在msdn forum here问了一个类似的问题。从Windows 8.1开始,webview被实现为一个单独的窗口,当它具有焦点时完全窃取所有键盘输入而不将任何键盘输入传递给控制应用程序。如果您能够更改被调用网站中的HTML,则可以使用javascript侦听器在应用程序和webview之间传递事件,但我自己没有对此进行测试。不幸的是,目前似乎没有任何其他解决方法。

答案 2 :(得分:0)

这样的事情怎么样?

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

答案 3 :(得分:0)

这可能会有所帮助

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

答案 4 :(得分:0)

在Windows.UI.Xaml.Controls.Page上怎么样:

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