想象以下简单的页面标记:
<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/