Вы можете использовать .Where
ExtensionMethod в коллекции TreeView.Items, а затем находить по своему желанию.
В WPF больше нет TreeNode, вместо этого TreeView имеет TreeViewItems, ListView имеет ListViewItems и т. Д. Поэтому TreeViewItem - это то, что вам следует использовать в этих случаях. (Хотя вы можете добавить все, что вам нравится, в TreeView, он обернется для вас.)
FindName возвращает объект, потому что он не знает, что он собирается найти, вы должны привести его к тому, что вы ожидаете. Но это поведение, которое вы хотите использовать. Кроме того, хотя любые элементы с Именем автоматически регистрируются, если они создаются в XAML, это не так, если вы создаете элементы в C # / VB и добавляете их в пользовательский интерфейс. Вам нужно будет «зарегистрировать» их имя, чтобы получить доступ к нему с помощью FindName ().
Вот небольшой пример, демонстрирующий TreeViewItem и доступ к элементам TreeView через 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);