uwp - 如何避免 UWP 中 TextBox 的焦点丢失?
问题描述
我试过什么?
<Grid >
<Canvas>
<Canvas x:Name="Gesture" Width="500" Height="500" Background="Gray" AllowFocusOnInteraction="False">
</Canvas>
<StackPanel x:Name="SidePanel" Canvas.Left="500" Background="LightCyan" Width="100" Height="500">
<TextBox x:Name="NameBox" Text="Prem" Width="100" Height="35"/>
<Button Content="But" AllowFocusOnInteraction="False"/>
</StackPanel>
</Canvas>
</Grid>
我需要达到什么目标?
当文本框获得焦点时,如果我单击 Button 它不会失去焦点。因为,我设置了 Button 属性 - AllowFocusOnInteraction="False"。
当我在灰色区域(手势画布)内单击时,我需要达到同样的效果。我已经设置了画布属性-AllowFocusOnInteraction="False"。但它不会起作用。
当我在手势画布内单击时,文本框应该是焦点。怎么做?为什么 AllowFocusOnInteraction 在手势画布上不起作用?
解决方案
您可以在事件中设置焦点状态,LostFocus
以确保您的 TextBox 不会失去焦点。
您可以处理TextBox的 LostFocus 事件和StackPanel的 Tapped 事件。然后当点击StackPanel时,更改标志值并在LostFocus
事件中设置焦点状态
<StackPanel x:Name="SidePanel" Canvas.Left="500" Background="LightCyan" Width="100" Height="500" Tapped="SidePanel_Tapped">
<TextBox x:Name="NameBox" Text="Prem" Width="100" Height="35" LostFocus="NameBox_LostFocus"/>
<Button Content="But" AllowFocusOnInteraction="False"/>
</StackPanel>
背后的代码
private bool setFocus = true;
private void NameBox_LostFocus(object sender, RoutedEventArgs e)
{
if (setFocus == true)
{
NameBox.Focus(FocusState.Programmatic);
}
}
private void SidePanel_Tapped(object sender, TappedRoutedEventArgs e)
{
setFocus = true;
}
推荐阅读
- rest - Rest Api 操作 URL 以获得 X 数量的结果
- php - 将 XML 文件转换为 HTML 文件
- javascript - Googlesheets 中的 Googlesheets Apps 脚本超链接
- postgresql - PyQt5 无法加载 PostgreSQL 驱动程序
- ios - Swift 4 pop to a view controller : navigation method
- reactjs - 在 reactstrap 中,如何从调用组件将参数传递给 Jumbotron?
- azure - 用于存储应用用户机密的 Azure Key Vault 机密
- ios - 我如何从手表应用程序检查用户是否登录到手机应用程序
- python - 如何从 Keras 中的自定义损失函数中获取结果?
- selenium - org.openqa.selenium.ElementNotInteractableException - 键盘无法访问元素