0

2 つのテキスト ボックス、チェック ボックス、および下部にある別の 2 つのテキスト ボックスを含むページがあります。

チェックボックスをクリックすると、その下のテキストボックスにフォーカスを設定したい。これは問題なく動作し、ソフト キーボードが表示され、画面が上にスクロールしてキーボードの上にテキスト ボックスが表示されます。

ただし、TextBox1 または TextBox2 のいずれかに現在フォーカスがあり、キーボードが既に表示されている場合、CheckBox_Click イベントからフォーカスを設定すると、画面がリセットされ、下にスクロールされます。

イベントが互いに衝突すると推測しています-TextBoxはフォーカスを失い、キーボードを隠します+画面を下にスクロールします-TextBoxは外部からフォーカスを取得し、キーボードを表示します(ただし、画面を上にスクロールしません)

これをどうにかして防ぐことはできますか?

これは、xaml とコードの簡略化されたバージョンです。

xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <StackPanel Margin="0,100,0,0">
        <TextBox x:Name="TextBox1" />
        <TextBox x:Name="TextBox2" />
        <CheckBox Content="Click Me" Click="CheckBox_Click" />
        <TextBox x:Name="TextBox3" />
        <TextBox x:Name="TextBox4" />
    </StackPanel>
</Grid>

コードビハインド:

private void CheckBox_Click(object sender, RoutedEventArgs e)
{
    TextBox3.Focus();
}
4

1 に答える 1

0

あなたが抱えている問題は、スクロール可能なコンテナーになく、SIP によって隠されているコントロールにフォーカスがあるときに、OS がページを移動しようとすることです。

すべてのコンテンツを に配置し、選択したコントロールに基づいて、SIP が表示されるかどうかをScrollViewer調整することで、これを回避しました。VerticalScrollOffsetこれは非常に厄介で面倒なコードがたくさんありました。簡単な解決策がないため、開始する前に、フォーカスを移動する価値があるかどうかを自問してください。

于 2013-03-18T18:15:48.710 に答える