2009-06-05 10 views
1

Nachdem Sie Artikel auf das „root“ Niveau eines System.Windows.Controls.TreeView hinzugefügt haben, was der richtige Weg ist durch Namen hinzufügen in „Subitems“ ?.NET WPF - System.Windows.Controls.TreeView Hinzufügen SubItems

System.Windows.Controls.TreeView.Items < - scheint keinen Find() oder [] nach Namen zu haben.

UPDATE: Oh, warte ... ist es TreeView.FindName()?

Eigentlich sieht aus wie Findname wird nicht funktionieren, weil es ein Objekt zurückgibt, nicht etwas, das Sie Subitems auch hinzufügen können.

Auf einer zweiten Note: Ist es falsch, eine Klasse wie diese zu verwenden, um es mit Gegenständen zu laden, da sie keine TreeNode wie WinForms nicht bieten?

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

Antwort

1

Sie können .Where ExtensionMethod auf der TreeView.Items Sammlung verwenden und finden dann nach, was Sie wollen.

Es gibt keinen TreeNode mehr in WPF, stattdessen hat eine TreeView TreeViewItems, ListView hat ListViewItems, etc. Also das TreeViewItem ist, was Sie in diesem Fall verwenden sollten. (Obwohl Sie dem TreeView alles hinzufügen können, was Sie möchten, wird es für Sie gepackt.)

FindName gibt ein Objekt zurück, weil es nicht weiß, was es finden wird, Sie müssen es in das umsetzen, was Sie erwarten es zu sein. Aber das ist das Verhalten, das Sie verwenden möchten. Auch während all Elemente mit einem Namen automatisch registriert werden, wenn sie in XAML erstellt werden, das ist nicht der Fall, wenn Sie die Einzelteile in C#/VB erstellen und das Hinzufügen von ihnen zu der Benutzeroberfläche. Sie müssen ihren Namen registrieren, um mit FindName() darauf zugreifen zu können.

Hier ist ein kleines Beispiel die TreeViewItem demonstriert und TreeView der Elemente durch den Zugriff auf 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);