Найти элемент управления ItemTemplate в TreeView - PullRequest
2 голосов
/ 13 марта 2009

Мое определение дерева:

<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 Ответ

1 голос
/ 13 марта 2009

Попробуйте свойство x: Name вместо свойства Name ...

Во-вторых, вам нужно ссылаться на ItemTemplate, а не на шаблон TreeView

Также вторым параметром должен быть контейнер ListItem, а не элемент данных:

ContentPresenter container = (ContentPresenter) tree.ItemContainerGenerator.ContainerFromItem(item);
CheckBox box = (CheckBox) container.ContentTemplate.FindName("Foo", container);
...