【发布时间】:2012-05-02 10:49:18
【问题描述】:
我正在处理一个包含注册表单的应用程序。该表单包含多个文本输入框,因此使用 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 仅通过向上推滚动查看器中的内容来正确运行]
测试用例
- 选择一个在屏幕顶部附近可见的文本框以打开键盘。
- 尝试在打开键盘的情况下滚动到页面底部。
- 页面底部的项目无法访问。
或
- 选择一个在屏幕底部附近可见的文本框。
- 整个页面的内容被上推。
- 尝试在打开键盘的情况下滚动到页面顶部。
- 无法访问页面顶部的项目,并且在关闭键盘之前,标题面板永远不会重新出现。
对于解决此问题的任何帮助将不胜感激。谢谢。
【问题讨论】:
-
以下博客文章可能是解决此问题的一个很好的起点:sorokoletov.com/2011/08/…
-
@PaulDiston 谢谢。我以前读过这个博客。我确实尝试了演示应用程序,但这不是我想要的。过渡非常突然(即标题面板只是在 SIP 动画结束时重新出现),更不用说对于如此简单的事情实现过度了。我的预期实现是与您在 Windows Phone 7 中包含的用于管理联系人和地址的“人员”应用程序中找到的联系人详细信息表单相匹配。这不是一个复杂的例子,人们会期望它开箱即用,不会覆盖表单中的项目。
-
如果它可以帮助解决滚动问题,也试试这个。 luisleo.net/2012/06/24/…
标签: windows-phone-7 scrollviewer soft-keyboard