テキストボックスの垂直セットを含むページがあります。それらの 1 つがフォーカスされている場合、オンスクリーン キーボードが表示されていても、それらすべてが表示されます。それらのすべてがキーボードの上の利用可能なスペースに収まるのに十分な数があります. 下部のテキスト ボックスがフォーカスされると、ページは自動的に上にスクロールされてすべてが表示されますが、上部のテキスト ボックスがフォーカスされると、オンスクリーン キーボードが下部のテキスト ボックスを覆います。
これは私のページの簡単な例です:
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<ItemsControl ItemsSource="{Binding List}" Margin="120 140 0 0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0 10 0 0">
<TextBox Text="{Binding Text, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
DataContext
10 項目のリストが含まれています。
public class Item
{
public string Text { get; set; }
}
public class ViewModel
{
public List<Item> List { get; set; }
}
public MainPage()
{
this.InitializeComponent();
DataContext = new ViewModel
{
List = Enumerable.Range(0, 10).Select(i => new Item { Text = i.ToString() }).ToList()
};
}
私はすでにいくつかのアプローチを試しましたが、すべて成功しませんでした:
- イベントでは
TextBox.GotFocus
、プログラムでフォーカスを下部のテキストボックスに変更して戻しました。 TextBox.GotFocus
イベントとInputPane.Showing
イベントで、a の垂直オフセットを設定しようとしました:ScrollViewer
(a) ページの周りに含めたものGrid
(b) 上記のビジュアル ツリーにあるPage
もの。Windows は、フォーカスされたコントロールを自動的に表示するために使用します。どちらの場合も、は呼び出しScrollViewer
に反応しません。ScrollToVerticalOffset
この質問で提案されているサンプルも見ましたが、ページをスクロールするのではなく、オンスクリーンキーボードへの反応が異なります。