为什么 FlipView 中包含的文本框在弹出时被软键盘遮挡? [英] Why is my text box contained in a FlipView obscured by the soft keyboard when it pops up?

查看:22
本文介绍了为什么 FlipView 中包含的文本框在弹出时被软键盘遮挡?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请考虑以下 XAML:

<页面资源><Style x:Key="FlipViewItemStyle" TargetType="FlipViewItem"><Setter Property="Background" Value="透明"/><Setter Property="Horizo​​ntalContentAlignment" Value="Stretch"/><Setter Property="VerticalContentAlignment" Value="Stretch"/><Setter Property="TabNavigation" Value="Local"/><Setter 属性="模板"><Setter.Value><ControlTemplate TargetType="FlipViewItem"><Border BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"背景="{模板绑定背景}"><ScrollViewer IsTabStop="True"ZoomMode="禁用"VerticalScrollMode="启用"Horizo​​ntalScrollMode="禁用"Horizo​​ntalScrollBarVisibility="禁用"VerticalScrollBarVisibility="自动"IsVerticalRailEnabled="True"><ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"ContentTransitions="{TemplateBinding ContentTransitions}"内容="{模板绑定内容}"Horizo​​ntalAlignment="{TemplateBinding Horizo​​ntalContentAlignment}"边距="{模板绑定填充}"VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></ScrollViewer></边框></控制模板></Setter.Value></Setter></风格></Page.Resources><Page.DataContext><l:MainPageViewModel/></Page.DataContext><网格><Grid.ColumnDefinitions><列定义/><ColumnDefinition Width="Auto"/></Grid.ColumnDefinitions><FlipView Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"ItemsSource="{绑定视图}" ItemContainerStyle="{StaticResource FlipViewItemStyle}"/></网格></页面>

在其中,我有一个在水平模式下运行的 FlipView.我想在 FlipView 中显示的内容太大了——这就是为什么我在 FlipViewItem 模板中添加了 ScrollViewer 以便用户可以垂直滚动(请注意 FlipView 模板内部使用了水平 ScrollViewer).

FlipView 显示的内容包含输入控件,如文本框,显然,当用户点击文本框时会显示软键盘(以便它获得焦点).

这是我的实际问题:为什么文本框没有转换为未被软键盘遮挡的剩余视口(见图片)

显然,这必须对 FlipView 做一些事情,因为当我仅在 ScrollViewer 中显示我的示例视图(甚至根本没有 ScrollViewer)时,当软键盘弹出时,文本框会被正确翻译.

我已经尝试了以下步骤:

  1. 我尝试在 FlipView 模板中的 ScrollViewer 上启用垂直滚动 - 这不起作用,因为 FlipView 似乎覆盖了 OnApplyTemplate(或其他东西)中的相应值 - 当 FlipView 的 VirtualizingStackPanel 上的 Orientation 时,VerticalScrollMode 被禁用设置为水平.
  2. 如上所述,我尝试仅在 ScrollViewer(工作正常)甚至没有 ScrollViewer(工作正常)中显示完全相同的视图.
  3. 我还检查了 ScrollViewer.BringIntoViewOnFocusChanged 但这并没有改变任何东西(此外,此属性的默认值设置为 true).

有什么办法可以绕过这个问题吗?非常感谢您的帮助!

解决方案

我找到了导致问题的组件:它是 VirtualizingStackPanel 用作 FlipView 中的项目宿主.如果与普通的StackPanel 交换,那么当软键盘弹出时,输入控件会按预期转换到剩余的视口.

您可以使用以下方法交换VirtualizingStackPanel:

只需像这样直接在 FlipView 上设置 ItemsPanel 属性:

<FlipView.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation="Horizo​​ntal" AreScrollSnapPointsRegular="True"/></ItemsPanelTemplate></FlipView.ItemsPanel></FlipView>

如果你有多个 FlipView,在它们之间共享一个样式更合适: