Эта проблема кажется простой. У меня есть TreeView, давайте назовем его MyTreeView, заселенный со всеми буквами дисков, так что TreeView выглядит следующим образом:
A: \
C: \
D: \
F: \
Проверка наличия древовидной черепицы
Как проверить, содержит ли treeview определенный элемент? Как дерево отображает его элементы? Я создал MessageBox, чтобы показать MyTreeView.Items.GetItemAt (1), и он идентифицирует пункт 1 как:
"System.Windows.Controls.TreeViewItem Заголовок: C: \ Items.Count: 1"
Try проще всего первое, что, очевидно, не работает:
if (MyTreeView.Items.Contains(@"C:\")
{
MessageBox.Show(@"Tree contains C:\");
}
следующая проще всего было бы попробовать сделать TreeViewItem, похожее на то, что я хочу, что также не работает:
TreeViewItem myItem = new TreeViewItem();
myItem.Header = @"C:\";
if (MyTreeView.Items.Contains(myItem)
{
MessageBox.Show("Tree contains " + myItem.ToString());
}
Просто убедиться, что я имел фундаментальное понятие права, я попробовал некоторые круговую логику, которая на самом деле делает работу:
var myItem = MyTreeView.Items.GetItemAt(1);
if (MyTreeView.Items.Contains(myItem)
{
MessageBox.Show("Tree contains " + myItem.ToString());
}
Какие выходы:
«Дерево содержит System.Windows.Controls.TreeViewItem Заголовок: C: \ Items.Count : 1 "
Что я делаю неправильно? Как проверить, содержит ли мое дерево что-то вроде «C: \»?
редактировать:
Код для построения дерева такова:
(в основном копировать и вставлять из Интернета)
foreach (string myString in Directory.GetLogicalDrives())
{
TreeViewItem item = new TreeViewItem();
item.Header = myString;
item.Tag = myString;
item.FontWeight = FontWeights.Normal;
item.Items.Add(dummyNode); // this is (object)dummyNode = null
item.Expanded += new RoutedEventHandler(DWGFolder_Expanded);
item.Selected += new RoutedEventHandler(DWGFolder_Selected);
// the Expanded event is very similar,
// subitem.Header is the folder name (Testing),
// while subitem.Tag is the full path (C:\Testing)
MyTreeView.Items.Add(item);
}
Поэтому в основном я пытаюсь соответствовать объекты TreeViewItem.
Причина ваша вторая не работает, что ваш TreeView, очевидно, не будет содержать элемент, который вы только что создали. Ваш третий метод очень близок. Вы сказали, что это работает, почему бы не продолжать его строить? –
Вы можете назначить объекту в своем древовидном представлении имя, а затем использовать '.FindName' - https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.findname(v=vs.100). aspx – cdsln