Найти элемент управления ItemTemplate в TreeView
Мое определение дерева:
<TreeView Name="tree" ItemsSource="{Binding Children}" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<CheckBox Name="foo"></CheckBox>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
Имея элемент TreeViewItem, я пытаюсь найти соответствующий CheckBox, но
tree.Template.FindName("foo", item);
бросает
[System.InvalidOperationException] = {"This operation is valid only on elements that have this template applied."}
А также
item.Template.FindName("foo", item)
дает мне ноль. Что такое правильное решение?
1 ответ
Решение
Попробуйте свойство x:Name вместо свойства Name...
Во-вторых, вам нужно ссылаться на ItemTemplate, а не на шаблон TreeView.
Также вторым параметром должен быть контейнер ListItem, а не элемент данных:
ContentPresenter container = (ContentPresenter) tree.ItemContainerGenerator.ContainerFromItem(item);
CheckBox box = (CheckBox) container.ContentTemplate.FindName("Foo", container);