Windows Phone 8.1 XAML App.如何防止不适当的自动焦点更改
本文关键字:焦点 不适当 何防止 Phone XAML App Windows | 更新日期: 2023-09-27 18:36:27
>想象一下以下简单的页面标记:
<Page
x:Class="AutoFocusBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<!--<Button x:Name="FocusHolder" Width="0" Height="0" MinHeight="0" MinWidth="0"/>-->
<TextBox Text="zxczczczczx"/>
<Button x:Name="Button1" Content="Button1" Click="ButtonBase_OnClick"/>
</StackPanel>
</Page>
以及以下代码隐藏:
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
Button1.Visibility = Visibility.Collapsed;
}
当我单击Button1
按钮时,它会隐藏(这是预期和期望的),但由于某种原因TextBox
自动获得焦点并出现屏幕键盘。我不想要这种意外的自动对焦。
我可以尝试在处理程序中做一些带有焦点Click
但在实际应用程序中,它是使用 ViewModel 通过命令等实现的,它看起来像肮脏的黑客(即使我在隐藏按钮后立即更改焦点,键盘也会短时间出现)。
我发现的第二种方法是在文本框之前的某个地方创建"不可见"按钮(FocusHolder
注释),这要好得多,但看起来也不像正确的技术。
那么,那是什么呢?这是我可以以某种方式配置为从折叠元素"重定向"焦点的某种机制吗?还是错误?防止这种不需要的自动对焦的正确方法是什么?
原因是
Tab
索引从按钮切换到文本框。这是WP8.1的一个非常烦人的事情。我还没有找到一个"好"的解决方案,但这可能比您当前的解决方案更干净。
该 xaml
<TextBox x:Name="myTextBox" Text="zxczczczczx"/>
函数
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
myTextBox.IsTabStop = false;
Button1.Visibility = Visibility.Collapsed;
myTextBox.IsTabStop = true;
}
祝你好运。
我能够通过设置TabIndex来解决这个问题。
将索引顺序设置为专注于 TextBox 之前的第二个控件。
<Page
x:Class="AutoFocusBug.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<!--<Button x:Name="FocusHolder" Width="0" Height="0" MinHeight="0" MinWidth="0"/>-->
<TextBox Text="zxczczczczx" TabIndex="2"/>
<Button x:Name="Button1" Content="Button1" Click="ButtonBase_OnClick" TabIndex="1"/>
</StackPanel>
尝试将 TabNavigation="Cycle" 设置为按钮。这对我有用。