如何在页面加载时处理 UWP 键关闭事件
本文关键字:UWP 事件 处理 加载 | 更新日期: 2023-09-27 18:32:10
在网格中单击后,我可以开始在我的控件中键入,但我希望能够在不必先单击的情况下开始键入。我可以在后面的代码中放入一些东西以使键盘输入专注于页面加载?
在我看来,我有:
<Grid x:Name="PageGrid"
KeyDown="{x:Bind ViewModel.OnKeyboardNumberInput, Mode=OneWay}"
在我的视图模型中,我有:
public void OnKeyboardNumberInput(object sender, KeyRoutedEventArgs e)
{
您可以在Page
的 Loaded 事件中执行此操作,此事件
在构造框架元素并将其添加到对象树并准备好进行交互时发生。
如果要启用键盘输入,则控件应该是可编辑的。
当您导航到 Page
时,它将自动聚焦在此Page
中的第一个控件上。但是我们可以像这样改变这个焦点:
XAML:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<TextBox x:Name="txt1" VerticalAlignment="Center" HorizontalAlignment="Center" Width="400" />
<TextBox x:Name="txt2" VerticalAlignment="Bottom" HorizontalAlignment="Center" Width="400" />
</Grid>
代码隐藏:
public MainPage()
{
this.InitializeComponent();
this.Loaded += Page_Loaded;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
txt2.Focus(FocusState.Keyboard);
}
请注意,您可能已经在项目中使用了 MVVM 模式,您可以像这样操作:
XAML:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Loaded="{x:Bind ViewModel.page_Loaded, Mode=OneWay}">
<TextBox x:Name="txt1" VerticalAlignment="Center" HorizontalAlignment="Center" Width="400" />
<TextBox x:Name="txt2" VerticalAlignment="Bottom" HorizontalAlignment="Center" Width="400" />
</Grid>
视图模型中的代码隐藏:
public void page_Loaded(object sender, RoutedEventArgs e)
{
var grid = sender as Grid;
var tb = (TextBox)grid.FindName("txt2");
tb.Focus(FocusState.Keyboard);
}
如果要键入特定控件,将焦点设置为该控件比尝试处理键盘事件更好。假设一个简单的窗口:
<Window
x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Loaded="OnWindowLoaded"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox x:Name="myTextBox" />
</Grid>
</Window>
在代码隐藏中:
private void OnWindowLoaded(object sender, RoutedEventArgs e)
{
myTextBox.Focus();
}