2010-02-09 32 views
2

我在Silverlight 3SL3 TreeView控件無法以編程方式滾動

一個TreeView TreeView所綁定到一個觀察的集合 - 包含分層數據的列表。

當頁面最初加載時,默認情況下樹狀視圖中的所有節點都會摺疊。

我有功能,允許在樹視圖中的某個項目以編程方式選擇。

我遇到的問題是選擇的項目不能立即顯示(即一個或多個父節點已摺疊)。我以編程方式展開它們,但是,當我嘗試以編程方式滾動到視圖中時,用戶可以看到選定的項目,但它不起作用。

我進一步研究了這一點,我相信它與計算器的查看器高度有關。它幾乎看起來像是一個計時問題,因爲如果項目的父節點已展開,然後以編程方式選擇該項目,則將該樹視圖滾動到該選定樹視圖項目的視圖中的代碼完美工作。

請參考我正在使用的擴展方法將樹視圖滾動到視圖中。任何幫助或建議如何糾正這將不勝感激。

謝謝。

public static void BringIntoViewForScrollViewer(this FrameworkElement frameworkElement, ScrollViewer scrollViewer) 
    { 
     var transform = frameworkElement.TransformToVisual(scrollViewer); 
     var positionInScrollViewer = transform.Transform(new Point(0, 0)); 

     if (positionInScrollViewer.Y < 0 || positionInScrollViewer.Y > scrollViewer.ViewportHeight) 
      scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + positionInScrollViewer.Y - ScrollPadding); 
    } 
+3

你有沒有打過電話的樹視圖或ScrollViewer中UpdateLayout請()中展開節點,並調用您的擴展方法,以確保VerticalOffset和ViewportHeight性能之間最新? – 2010-02-09 17:17:03

+0

就是這樣 - 必須在TreeView和ScrollViewer上調用UpdateLayout。 謝謝! – Chris 2010-02-09 20:21:55

+0

可能希望將其添加爲官方答案+將其標記爲已回答,以便它不會顯示在未答覆的搜索上。 – 2010-02-18 20:13:17

回答

1

TreeViewScrollViewer呼叫UpdateLayout中展開節點,並調用您的擴展方法,以確保VerticalOffsetViewportHeight性能均達到日之間。

(答案由Dan Auclair導致問題的解決從評論複製)