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

Joe*_*ari 2 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 };
Run Code Online (Sandbox Code Playgroud)

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

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

Joe*_*ari 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;
}
Run Code Online (Sandbox Code Playgroud)