Найти элемент управления 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);
Другие вопросы по тегам