2009-06-05 11 views
1

Une fois que vous avez ajouté des éléments au niveau "racine" d'un System.Windows.Controls.TreeView, quelle est la bonne façon d'ajouter des "sous-éléments" par nom ?.NET WPF - System.Windows.Controls.TreeView Ajout de sous-éléments

System.Windows.Controls.TreeView.Items < - ne semble pas avoir un nom Find() ou [].

MISE À JOUR: Oh, attendez ... est-ce TreeView.FindName()?

Apparemment, FindName ne fonctionnera pas car il renvoie un objet, pas quelque chose que vous pouvez ajouter des sous-éléments.

Sur une deuxième note: est-ce mal d'utiliser une classe comme celui-ci pour le charger avec des objets, car il ne fournit pas un TreeNode comme WinForms?

public class TreeItem 
{ 
    public string Name { get; set; } 
    public string Text { get; set; } 
    public object Tag { get; set; } 
} 

Répondre

1

Vous pouvez utiliser .Where ExtensionMethod sur la collecte TreeView.Items, puis trouver par ce que vous voulez.

Il n'y a plus de TreeNode dans WPF, à la place un TreeView a TreeViewItems, ListView a ListViewItems, etc. Donc TreeViewItem est ce que vous devriez utiliser dans ce cas. (Bien que vous puissiez ajouter quelque chose que vous aimez à TreeView, il va l'emballer pour vous.)

FindName renvoie un objet car il ne sait pas ce qu'il va trouver, vous devez le faire à ce que vous attendez c'est être. Mais c'est le comportement que vous voulez utiliser. En outre, si les éléments avec un nom sont automatiquement enregistrés s'ils sont créés en XAML, ce n'est pas le cas si vous créez les éléments en C#/VB et les ajoutez à l'interface utilisateur. Vous devrez «enregistrer» leur nom afin de pouvoir y accéder par FindName().

est ici un petit exemple montrant les éléments de TreeViewItem et un accès TreeView par FindName:

TreeView tree = new TreeView() { Name = "tree" }; 
uiDockPanel.Children.Add(tree); 

var item1 = new TreeViewItem() { Header = "Item 1", Name = "Item1" }; 
tree.Items.Add(item1); 
item1.RegisterName("Item1", item1); 

var item2 = new TreeViewItem() { Header = "Item 2", Name = "Item2" }; 
tree.Items.Add(item2); 
item1.RegisterName("Item2", item2); 

var item3 = new TreeViewItem() { Header = "Item 3", Name = "Item3" ; 
tree.Items.Add(item3);   
item1.RegisterName("Item3", item3); 

var i2 = tree.FindName("Item2") as TreeViewItem; 
var subitem = new TreeViewItem() { Header = "SubItem 1"}; 
i2.Items.Add(subitem); 
Questions connexes