被四处撒网的答案寻找,但我没有发现任何东西,这是否:更改完全滚动位置在ListView
我想换一个WPF名单的确切位置IEW编程。某种说法
ListView.Scrollposition.Y = some value;
我唯一能找到的就是将值更改为Listview中的一个对象,而不是具体的坐标。 如果有人有一些好的文章或这个主题的帖子,我会很感激!
谢谢。
被四处撒网的答案寻找,但我没有发现任何东西,这是否:更改完全滚动位置在ListView
我想换一个WPF名单的确切位置IEW编程。某种说法
ListView.Scrollposition.Y = some value;
我唯一能找到的就是将值更改为Listview中的一个对象,而不是具体的坐标。 如果有人有一些好的文章或这个主题的帖子,我会很感激!
谢谢。
使用ListView
元素没有办法做到这一点。相反,您需要访问其ScrollViewer
,然后可以使用ScrollViewer.ScrollToVerticalOffset
Method设置ScrollViewer
的垂直位置。您还需要使用ScrollViewer.VerticalOffset
,ScrollViewer.VerticalOffset
,ScrollViewer.ViewportHeight
和ScrollViewer.ExtentHeight
属性来测量您在ScrollViewer
中的位置。
从ScrollViewer
Class页上MSDN:
包括所有的ScrollViewer的内容是程度的面积。内容的可见区域是视口。
最后,您如何从ListView
获得ScrollViewer
?我不能保证这将在ListView
上运行,但它在ListBox
上运行。您可以使用VisualTreeHelper.GetChild
Method钻研ListView
的可视化树,它应该包含一个Border
然后ScrollViewer
,所以你应该能够做这样的事情:
Border border = (Border)VisualTreeHelper.GetChild(YourListView, 0);
ScrollViewer scrollViewer = VisualTreeHelper.GetChild(border, 0) as ScrollViewer;
if (scrollViewer != null)
{
scrollViewer.ScrollToVerticalOffset(60.0);
}
如果做在GetChild
方法返回时发生错误,通过调试它很容易调整。只需在那里放置一个断点,看看每个子类型是什么,然后在这些元素之一中添加另一行......最终,它应该找到ScrollViewer
。不过,我认为那个代码应该没问题。
如果它是一个ListView
那么首先你需要找到ScrollViewer
:
private ScrollViewer FindScrollViewer(DependencyObject d)
{
if (d is ScrollViewer)
return d as ScrollViewer;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(d); i++)
{
var sw = FindScrollViewer(VisualTreeHelper.GetChild(d, i));
if (sw != null) return sw;
}
return null;
}
,当你发现它,那么你可以ScrollToVerticalOffset
var sw = FindScrollViewer(listView);
if (sw != null) sw.ScrollToVerticalOffset(x);
非常深入的答案,我会看看Scrollviewer类,几乎知道它就是它。谢谢你这个美好的回答! :) – Tokfrans