想象以下简单的页面标记:

<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和命令等实现的,看起来像肮脏的hack(即使隐藏按钮后立即更改焦点,键盘也会出现很短的时间)。

我发现的第二种方法是在文本框(注释为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;
}

祝你好运。

关于c# - Windows Phone 8.1 XAML应用。如何防止不适当的自动对焦改变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27778517/

10-12 03:07