6

これが重複していないことを願っていますが、実際の使用 方法に関するドキュメントや例が見つかりませんScrollToVerticalOffset()。Windows Phone 8 アプリで使用していますが、WP7 と Silverlight にも適用できると思います (ただし、間違っている場合は自由に修正してください)。

だからここに私の基本的なセットアップがあります(メモリからの疑似コード):

<phone.PivotItem>
   <ScrollViewer>
      <Grid Height="1500">
         <Grid.RowDefinitions>
            <!-- about 20 rows, all auto-height -->
         </Grid.RowDefinitions>

         <Border Grid.Row="0">
            <TextBox x:Name="txt1" />
         </Border>
         <Border Grid.Row="1">
            <TextBox x:Name="txt2" />
         </Border>

         <!-- ...... -->

         <Border Grid.Row="19">
            <TextBox x:Name="txt20" />
         </Border>
      </Grid>
   </ScrollViewer>
</phone.PivotItem>

ご覧のとおり、 の中に があり、 のScrollViewerPivotItemに がありGridます。にGridは約 20TextBoxの s があり、それぞれがBorder. TextBoxこのページの読み込み時にこれらのいずれかに動的にフォーカスを設定しているため、フォーカスをTextBox#6-20 (おおよそ) に設定するたびに、手動で下にスクロールして表示する必要があります。自動スクロールして、フォーカスのある方がユーザーの中央に表示されるようにしますScrollViewerTextBox

ドキュメントScrollToVerticalOffset()は次のように書かれています:

ScrollViewer 内のコンテンツを、指定された垂直方向のオフセット位置までスクロールします。

そして、それは のタイプを受け入れますSystem.Double

私が理解していないのは、A) 渡すことになっている値と、B) どうすればその値を取得できるかということです。0 と私の身長Grid(1500) の間の数値である必要がありますか? TextBoxもしそうなら、スクロールできるように特定の位置を特定するにはどうすればよいですか?

簡単な例があれば、自由にリンクしてください。このメソッドを呼び出すときに内容がScrollViewer問題になるかどうかはわかりませんが、問題がある場合は、それをどのように使用しているかを正確に示したいと思いました。

よろしくお願いします!

4

1 に答える 1

12

UIElement.TransformToVisual呼び出しを使用して、別の UIElement に対する任意の UIElement の位置を確認できます。

まず、TextBox と ScrollViewer の間の変換を取得します。

GeneralTransform transform = textBox.TransformToVisual(scrollViewer);

次に、TextBox のどの点 (0,0) が ScrollViewer に対して相対的かを調べます。つまり、TextBox の原点 (0,0) は ScrollViewer のどの位置にありますか。

Point textBoxPosition = transform.Transform(new Point(0, 0));

ScrollViewer に対する TextBox の Y 位置がわかったので、その Y オフセットまでスクロールします。

scrollViewer.ScrollToVerticalOffset(textBoxPosition.Y);

幸運を!

于 2013-02-27T16:07:23.333 に答える