给焦点文本框上的键按

本文关键字:焦点 文本 | 更新日期: 2023-09-27 18:08:35

当用户在我的应用程序中开始输入任何地方时,我想给一个文本框焦点。

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

给焦点文本框上的键按

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

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

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

这可能有帮助

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

这样怎么样?

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

在Windows.UI.Xaml.Controls.Page:

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