我正在开发一个应用程序,其中包含一个注册表单。该表单包含多个文本输入框,因此使用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上的People应用程序,并尝试添加新联系人。它包含类似的结构,但是ScrollViewer正确地通过仅向上推动滚动视图器中的内容来推动内容]
测试用例
- 选择靠近屏幕顶部的可见文本框,以打开键盘。
- 尝试使用打开的键盘向页面底部滚动。
- 页面底部的项目无法访问。
或者
- 选择靠近屏幕底部的可见文本框。
- 整个页面的内容被推上。
- 尝试使用打开的键盘向页面顶部滚动。
- 页面顶部的项目无法访问,标题面板直到关闭键盘后才会重新出现。
希望能够得到解决此问题的任何帮助。谢谢。