3

有谁知道以编程方式将 WPF DataGrid (.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 回答