我正在处理一个包含注册表单的应用程序。该表单包含多个文本输入框,因此使用 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 位于网格单元格内,这意味着标题面板应始终保持 OnScreen)
滚动效果很好,所以这不是问题。但是,当用户选择文本框输入数据(即软键盘打开)时,系统会将整个页面的内容(包括注册标题面板)推送到周围,这不是预期的行为。[查看 Windows Phone 上的人脉应用并尝试添加新联系人。这包含类似的结构,但 ScrollViewer 仅通过向上推滚动查看器中的内容来正确运行]
测试用例
- 选择一个在屏幕顶部附近可见的文本框以打开键盘。
- 尝试在打开键盘的情况下滚动到页面底部。
- 页面底部的项目无法访问。
或者
- 选择一个在屏幕底部附近可见的文本框。
- 整个页面的内容被向上推。
- 尝试在打开键盘的情况下滚动到页面顶部。
- 页面顶部的项目无法访问,并且在关闭键盘之前,标题面板永远不会重新出现。
任何有关解决此问题的帮助将不胜感激。谢谢。