Windows Phone 8.1 XAML 应用程序。如何防止不适当的自动对焦改变?
Posted
技术标签:
【中文标题】Windows Phone 8.1 XAML 应用程序。如何防止不适当的自动对焦改变?【英文标题】:Windows Phone 8.1 XAML App. How to prevent inappropriate automatic focus change? 【发布时间】:2015-01-05 11:24:35 【问题描述】:想象一下以下简单的页面标记:
<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
),这相当好,但看起来也不正确。
那么,那是什么?这是我可以以某种方式配置为从折叠元素“重定向”焦点的某种机制吗?或者它是一个错误?防止这种不受欢迎的自动对焦的正确方法是什么?
【问题讨论】:
【参考方案1】:这是由于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;
祝你好运。
【讨论】:
感谢您提供另一个解决方案。在我的情况下,“隐形”按钮仍然是最好的解决方案,但有更多选择是件好事。似乎没有正确的解决方案,所以我要结束这个问题了。【参考方案2】:我可以通过设置 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>
【讨论】:
【参考方案3】:尝试将 TabNavigation="Cycle" 设置为 Button。这对我有用。
【讨论】:
以上是关于Windows Phone 8.1 XAML 应用程序。如何防止不适当的自动对焦改变?的主要内容,如果未能解决你的问题,请参考以下文章
为 Windows Phone 8.1 XAML 应用程序显示的奇怪版本
如何在 Windows Phone 8.1 XAML (RT) 应用程序中显示 admob 广告?
Windows Phone 8.1 XAML 应用程序。如何防止不适当的自动对焦改变?
适用于 Windows Phone 8.1(无 XAML)的最小应用程序:与桌面应用程序的差异