有没有人知道用于以编程方式将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不仅会滚动自己的网格,还会滚动外部网格,以便在屏幕上显示所请求的元素。这在某些情况下可能是有益的,但在其他情况下肯定不会。
答案 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;
}