我正在编写一个包含注册表单的应用程序。该表单包含多个文本输入框,因此使用 ScrollViewer 将它们全部显示在一页上。
以下是我正在使用的 XAML 代码的精简示例:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="SCROLLVIEWER TEST" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="registration" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<ScrollViewer Grid.Row="1">
<StackPanel>
<TextBlock Text="Hello" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello1" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello2" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello3" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello4" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello5" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello6" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello7" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello8" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="END" Margin="12,0,0,0"/>
<TextBox />
</StackPanel>
</ScrollViewer>
</Grid>
(请注意,ScrollViewer 位于网格单元内,这意味着标题面板应始终保持在屏幕上)
滚动效果非常好,所以这不是问题。但是,当用户选择文本框输入数据(即打开软键盘)时,系统会推送整个页面的内容(包括注册标题面板),这不是预期的行为。
[请参阅 Windows Phone 上的“联系人”应用程序并尝试添加新联系人。这包含类似的结构,但 ScrollViewer 仅通过向上推送滚动查看器中的内容来正确运行]
测试用例
- 选择屏幕顶部附近可见的文本框以打开键盘。
- 尝试在键盘打开的情况下滚动到页面底部。
- 页面底部的项目无法访问。
or
- 选择屏幕底部附近可见的文本框。
- 整个页面的内容被上推。
- 尝试在键盘打开的情况下滚动到页面顶部。
- 页面顶部的项目无法访问,并且标题面板在键盘关闭之前永远不会返回视图。
任何有关解决此问题的帮助将不胜感激。谢谢。