以编程方式将WPF 4 DataGrid滚动到结尾

时间:2013-01-10 06:58:49

标签: wpfdatagrid

有没有人知道用于以编程方式将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 };

如何以编程方式将此网格滚动到最后一行?

P.S。使用ScrollIntoView的另一个问题是,如果网格本身位于可滚动容器中(例如,在另一个网格内),则ScrollIntoView不仅会滚动自己的网格,还会滚动外部网格,以便在屏幕上显示所请求的元素。这在某些情况下可能是有益的,但在其他情况下肯定不会。

1 个答案:

答案 0 :(得分:6)

对于有此问题的人,以下似乎可以解决问题:

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;
}
相关问题