Scrollviewer和SIP问题(WP7.5芒果)

Jas*_*n H 10 scrollviewer soft-keyboard windows-phone-7

我正在申请一份包含注册表格的申请表.表单包含多个文本输入框,因此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>
Run Code Online (Sandbox Code Playgroud)

(请注意,ScrollViewer位于网格单元格内,这意味着标题面板应始终保持OnScreen)

滚动工作完全正常,所以这不是问题.但是,当用户选择TextBox输入数据(即软键盘打开)时,系统会推送整个页面的内容(包括注册标题面板),这不是预期的行为.[请参阅Windows Phone上的People应用程序并尝试添加新联系人.这包含一个类似的结构,但ScrollViewer只通过向上滚动查看器中的内容来正常运行]

测试用例

  • 选择屏幕顶部附近可见的TextBox,以打开键盘.
  • 尝试在键盘打开的情况下滚动到页面底部.
  • 页面底部的项目无法访问.

要么

  • 选择在屏幕底部附近可见的TextBox.
  • 整个页面的内容被推高.
  • 尝试在键盘打开的情况下滚动到页面顶部.
  • 页面顶部的项目无法访问,标题面板在键盘关闭之前永远不会返回视图.

任何有关解决此问题的帮助将不胜感激.谢谢.

Spi*_*iri 0

问题是 ScrollViwer 高度在键盘出现后没有修改,因此它被剪裁了。一种解决方案是修改滚动视图的高度(根据键盘高度),然后重新定位它(这可能会让您有些头痛)。

另一个问题是知道键盘何时出现 - 您可以在所有文本框上注册 GotFocus/LostFocus 事件,但这不是一个很好的解决方案。这可能对您有帮助:http://blogs.msdn.com/b/jaimer/archive/2010/11/05/guessing-if-the-sip-is-visible-in-a-windows-phone-application.aspx

希望这有所帮助 :)