2010-07-13 68 views
3

我試圖遍歷我的Treeview,展開所有節點,但它運行時運行到一個InvalidCastException;擴展所有WPF Treeview項目

無法將類型爲「System.Data.DataRowView」的對象轉換爲鍵入「System.Windows.Controls.TreeViewItem」。

我的代碼;

foreach (TreeViewItem treeitem in thetreeView.Items) 
{ 
    treeitem.IsExpanded = true; 
} 

任何想法?我想從一個按鈕開始。

回答

13

只需添加這種風格

<TreeView.ItemContainerStyle> 
    <Style TargetType="TreeViewItem"> 
     <Setter Property="IsExpanded" Value="True" /> 
    </Style> 
</TreeView.ItemContainerStyle> 

代碼,請通過這個鏈接可能是這可以幫助ü

http://bea.stollnitz.com/blog/?p=55

+1

雖然我想這待辦事項在運行時,樹視圖的初始狀態應該被關閉。我的想法是有一個崩潰/展開所有按鈕。 – wonea 2010-07-13 09:29:11

+0

因爲請閱讀這篇文章與例 http://bea.stollnitz.com/blog/?p=55 – 2010-07-13 09:30:47

+0

同意。比衣的帖子涵蓋了這個基本面。 – 2010-07-13 09:58:29

0

Bag of tricks有一個叫做「樹視圖展開」具有樹演示查看全部展開並摺疊所有按鈕(以及更多)

4

我發現了一個「黑客」解決方案。 它不參與繼承類的解決方案建議here(由基肖爾·庫馬爾

我添加了兩個按鈕 - 「關閉全部」和「全部展開」。

代碼背後:

private void btnCollapseAll_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (var item in treeView.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 
      CollapseTreeviewItems(((TreeViewItem)dObject)); 
     } 
    } 

    private void btnExpandAll_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (var item in treeView.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 
      ((TreeViewItem)dObject).ExpandSubtree(); 
     } 
    } 

    private void CollapseTreeviewItems(TreeViewItem Item) 
    { 
     Item.IsExpanded = false; 

     foreach (var item in Item.Items) 
     { 
      DependencyObject dObject = treeView.ItemContainerGenerator.ContainerFromItem(item); 

      if (dObject != null) 
      { 
       ((TreeViewItem)dObject).IsExpanded = false; 

       if (((TreeViewItem)dObject).HasItems) 
       { 
        CollapseTreeviewItems(((TreeViewItem)dObject)); 
       } 
      } 
     } 
    } 

我的解決方案是基於this