被四處撒網的答案尋找,但我沒有發現任何東西,這是否:更改完全滾動位置在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