3

メインアプリページに GridView があり、現在ユーザーに表示されているアイテムに対してバックグラウンド処理を実行し (優先度が高い)、もちろん他のアイテムも実行します (優先度が低い)。

ScrollBar と ScrollViewer にアクセスできますが、どのアイテムが現在のスクロール ウィンドウにあるかを教えてくれるものはありません。これをハックしようとすることもできますが、スクロール領域のサイズに基づいて行/列の数が変化するため、注意が必要です。

http://msdn.microsoft.com/en-us/library/windows/apps/br209745.aspx http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls .scrollviewer.aspx

どんな助けでも大歓迎です!

ありがとう

4

2 に答える 2

7

これを行うには、2 つの一般的な方法があります。GridViewItem1 つ目は'sを取得することですAutomationPeer。これには、実際に直接呼び出すメソッドがあります。クラス情報はこちら. ただし、これを実際に使用できるようにするのに問題がありました。幸いなことに、2 つ目の答えがあります。いくつかの計算を行う必要がありますが、実行可能です。

  1. GridViewItemを使用して、アイテム コンテナ (この場合は ) を取得します。GridViewItemContainerGenerator
  2. を取得しGridViewますScrollViewer。メソッドを検索できますFindVisualChild<T>。周りにはたくさんあります。
  3. これにより、アイテムのスクロール可能なパネル全体(として知られている)MyGridViewItem.TransformToVisual(MyGridViewScrollViewer).TransformPoint(new Point(0, 0));に対して、アイテムの左上隅が取得されます(これは後で重要になります)。ExtentScrollViewer

これにより、オブジェクトが返されますPoint

X次に、現在 に表示されている値の範囲を調べる必要がありますScrollViewer

注: 垂直スクロールScrollViewerを使用している場合は、Heights を使用します。水平、Widths を使用します。両方、両方使う。水平/幅を使用して例を実行します。

  1. を取るHorizontalOffset。これは、現在表示可能な領域の現在の「下限」です。
  2. HorizontalOffsetプラスを取りViewportWidthます。これは、現在表示可能な領域の上限です。
  3. が下限Point.Xよりも大きく、上限よりも小さい場合、アイテムは表示されます。

アイテム全体が表示されているかどうかをさらに確認する必要がある場合は、に対して同じ計算を行いPoint.X + GridViewItem.Widthます。

これがお役に立てば幸いです。コーディングをお楽しみください。

于 2013-05-23T17:08:38.250 に答える