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注释),这要好得多,但看起来也不像正确的技术。

那么,那是什么呢?这是我可以以某种方式配置为从折叠元素"重定向"焦点的某种机制吗?还是错误?防止这种不需要的自动对焦的正确方法是什么?

Windows Phone 8.1 XAML App.如何防止不适当的自动焦点更改

原因是

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" 设置为按钮。这对我有用。