c# – WinRT XAML并以编程方式将焦点设置为TextBox – 为什么Focus不粘?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WinRT XAML并以编程方式将焦点设置为TextBox – 为什么Focus不粘?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2462字,纯文字阅读大概需要4分钟。
内容图文
![c# – WinRT XAML并以编程方式将焦点设置为TextBox – 为什么Focus不粘?](/upload/InfoBanner/zyjiaocheng/786/29aedca4d3b249bb89618c360272c26a.jpg)
我的Windows 8 XAML页面包含两个控件:Image和TextBox.当用户双击Image时,我想将焦点移动到TextBox,以便自动显示虚拟键盘.
问题:TextBox控件正确接收焦点,但仅持续0.1秒.然后焦点移动到其他地方,不显示键盘.
通过这些事件,我可以看到为TextBox引发了GotFocus和LostFocus事件. Image控件没有其他事件处理程序,因为它只处理DoubleTapped事件:
private void CurrentPage_OnDoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
e.Handled = true;
this.PageNumberTextBox.Focus(FocusState.Keyboard);
}
为什么焦点不“粘”?重点放在何处以及为何?
更新:
使用this very helpful helper,我可以看到焦点移动到ScrollViewer [Windows.UI.Xaml.Controls.Border].我认为这是内置的(可能由RootFrame使用?)因为我没有添加任何ScrollViewers到页面,因为这个控件似乎填满了整个屏幕.
因此,问题似乎是由事件冒泡引起的:图像控制首先接收事件,然后是它背后的控制.但为什么?不应该e.Handled = true防止这种行为?
修改代码看起来像这样没有帮助:
private void CurrentPage_OnDoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
e.Handled = true;
//this.PageNumberTextBox.Focus(FocusState.Keyboard);
}
双击之后,神秘的ScrollViewer成为焦点.
更新2:
问题可能与图像控制有关.我创建了以下峰值:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Image Grid.Row="0" DoubleTapped="UIElement_OnDoubleTapped" Tapped="UIElement_OnTapped"
Source="http://upload.wikimedia.org/wikipedia/commons/1/1c/Squirrel_posing.jpg" Stretch="Fill"/>
<TextBox x:Name="MyBox" Grid.Row="1"/>
</Grid>
使用Blank模板创建加标应用程序.在后面的代码中,我为Tapped和DoubleTapped设置了e.Handled = true:
private void UIElement_OnDoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
e.Handled = true;
}
private void UIElement_OnTapped(object sender, TappedRoutedEventArgs e)
{
e.Handled = true;
}
问题:当我点击图像时,焦点总是给予这个神秘的ScrollViewer.这是一些截图:
>当我单击占据视图下半部分的TextBox时,焦点会正确移动到TextBox(带焦点的控件会突出显示,控件的名称会显示在左上角):
>当我单击顶部的图像时,图像不会获得焦点.相反,它给了神秘的ScrollViewer,它似乎填满了整个屏幕:
因此即使我将Image设置为同时处理Tapped和DoubleTapped,Image控件也不会获得焦点.
解决方法:
我认为你的问题是双击是在一系列最终改变焦点的事件中.您可以尝试通过异步调用Focus方法来“排列”焦点更改.例如:
Task.Factory.StartNew(
() => Dispatcher.RunAsync(CoreDispatcherPriority.Low,
() => PageNumberTextBox.Focus(FocusState.Keyboard)));
我知道它看起来有点愚蠢,但这样做的目的是尝试将更改焦点的代码放在队列中的所有其他事件之后.
内容总结
以上是互联网集市为您收集整理的c# – WinRT XAML并以编程方式将焦点设置为TextBox – 为什么Focus不粘?全部内容,希望文章能够帮你解决c# – WinRT XAML并以编程方式将焦点设置为TextBox – 为什么Focus不粘?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。