2010-07-13 5 views
3

J'essaie de parcourir mon Treeview, en développant tous les nœuds, mais il s'exécute en InvalidCastException lorsqu'il est exécuté;Elargi tous les éléments WPF Treeview

Impossible de convertir un objet de type 'System.Data.DataRowView' en type 'System.Windows.Controls.TreeViewItem'.

Mon code;

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

Des idées? Je veux tirer ceci d'un bouton.

Répondre

13

juste ajouter ce style

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

pour le code s'il vous plaît passer par ce lien peut être cela peut aider u

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

+1

Bien que je voudrais todo ce moment de l'exécution, l'état initial de l'Treeview doit être fermé. Mon idée est d'avoir un effondrement/développé tous les boutons. – wonea

+0

pour cela s'il vous plaît lire cet article avec l'exemple http://bea.stollnitz.com/blog/?p=55 –

+0

D'accord. Les offres de Bea ont couvert les principes fondamentaux de ceci. –

0

Bag of tricks a une démo appelée "TreeView Expand" qui a un arbre afficher avec tout développer et réduire tous les boutons (et un peu plus)

4

J'ai trouvé une solution "hackish" pour cela. Il n'a pas impliqué avec l'héritage comme la solution proposée here (par Kishore Kumar)

J'ai ajouté deux boutons - « Réduire tout » et « Développer tout ».

code Derrière:

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)); 
       } 
      } 
     } 
    } 

Ma solution est basée sur this