为什么 FlipView 中包含的文本框在弹出时被软键盘遮挡? [英] Why is my text box contained in a FlipView obscured by the soft keyboard when it pops up?
本文介绍了为什么 FlipView 中包含的文本框在弹出时被软键盘遮挡?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请考虑以下 XAML:
<页面资源><Style x:Key="FlipViewItemStyle" TargetType="FlipViewItem"><Setter Property="Background" Value="透明"/><Setter Property="HorizontalContentAlignment" 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="启用"HorizontalScrollMode="禁用"HorizontalScrollBarVisibility="禁用"VerticalScrollBarVisibility="自动"IsVerticalRailEnabled="True"><ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"ContentTransitions="{TemplateBinding ContentTransitions}"内容="{模板绑定内容}"HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"边距="{模板绑定填充}"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)时,当软键盘弹出时,文本框会被正确翻译.>
我已经尝试了以下步骤:
- 我尝试在 FlipView 模板中的 ScrollViewer 上启用垂直滚动 - 这不起作用,因为 FlipView 似乎覆盖了 OnApplyTemplate(或其他东西)中的相应值 - 当 FlipView 的 VirtualizingStackPanel 上的 Orientation 时,VerticalScrollMode 被禁用设置为水平.
- 如上所述,我尝试仅在 ScrollViewer(工作正常)甚至没有 ScrollViewer(工作正常)中显示完全相同的视图.
- 我还检查了 ScrollViewer.BringIntoViewOnFocusChanged 但这并没有改变任何东西(此外,此属性的默认值设置为 true).
有什么办法可以绕过这个问题吗?非常感谢您的帮助!
解决方案
我找到了导致问题的组件:它是 VirtualizingStackPanel
用作 FlipView 中的项目宿主代码>.如果与普通的
StackPanel
交换,那么当软键盘弹出时,输入控件会按预期转换到剩余的视口.
您可以使用以下方法交换VirtualizingStackPanel
:
只需像这样直接在 FlipView
上设置 ItemsPanel
属性:
<FlipView.ItemsPanel><ItemsPanelTemplate><StackPanel Orientation="Horizontal" AreScrollSnapPointsRegular="True"/></ItemsPanelTemplate></FlipView.ItemsPanel></FlipView>
如果你有多个 FlipView,在它们之间共享一个样式更合适: