给焦点文本框上的键按
本文关键字:焦点 文本 | 更新日期: 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);
}