3

プログラムでWPFDataGrid(.NET 4)を最後の行にスクロールするための信頼できるアプローチを知っている人はいますか?

私は知ってScrollIntoView(Items[Items.Count-1])いますが、これはアイテムが一意である場合にのみ機能します。

たとえば、インストールされているすべてのカルチャを表示し、その後にインストールされているすべてのカルチャを表示する次のDataGridについて考えてみます。

var cultures = System.Globalization.CultureInfo.GetCultures (System.Globalization.CultureTypes.AllCultures);
var timesTwo = cultures.Concat (cultures).ToArray();

var grid = new DataGrid { ItemsSource = timesTwo };

このグリッドをプログラムで最後の行までスクロールするにはどうすればよいですか?

PS ScrollIntoViewの使用に関する別の問題は、グリッド自体がスクロール可能なコンテナ内(たとえば、別のグリッド内)にある場合、ScrollIntoViewはそれ自体のグリッドだけでなく、要求された要素が画面に表示されるように外側のグリッドもスクロールすることです。これは、場合によっては有益かもしれませんが、他の場合には確かに有益ではありません。

4

1 に答える 1

7

この問題を抱えている人にとっては、次のことがうまくいくようです。

var scrollerViewer = GetScrollViewer();
if (scrollerViewer != null) scrollerViewer.ScrollToEnd();

...

ScrollViewer GetScrollViewer()
{
   if (VisualTreeHelper.GetChildrenCount (this) == 0) return null;
   var x = VisualTreeHelper.GetChild (this, 0);
   if (x == null) return null;
   if (VisualTreeHelper.GetChildrenCount (x) == 0) return null;
   return VisualTreeHelper.GetChild (x, 0) as ScrollViewer;
}
于 2013-01-12T05:42:16.787 に答える