登録フォームを含むアプリケーションに取り組んでいます。フォームには複数のテキスト入力ボックスが含まれているため、ScrollViewer を使用してそれらすべてを 1 ページに表示できるようにします。
以下は、私が使用している 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 はグリッド セル内にあることに注意してください。つまり、タイトル パネルは常にオンスクリーンのままにする必要があります)。
スクロールは問題なく動作するので問題ありません。ただし、ユーザーがデータを入力するために TextBox を選択すると (つまり、ソフト キーボードが開く)、システムはページ全体のコンテンツ (登録タイトル パネルを含む) をプッシュしますが、これは予期された動作ではありません。[Windows Phone の People アプリを見て、新しい連絡先を追加してみてください。これには同様の構造が含まれていますが、ScrollViewer はスクロールビューアー内のコンテンツを押し上げるだけで正しく動作します]
テストケース
- 画面の上部近くに表示されている TextBox を選択して、キーボードを開きます。
- キーボードを開いた状態で、ページの一番下までスクロールしてみます。
- ページの下部にあるアイテムにはアクセスできません。
また
- 画面の下部近くに表示されている TextBox を選択します。
- ページ全体のコンテンツが押し上げられます。
- キーボードを開いた状態で、ページの上部までスクロールしてみます。
- ページ上部の項目にはアクセスできず、キーボードを閉じるまでタイトル パネルは表示されません。
この問題を解決するための助けをいただければ幸いです。ありがとう。