我的树定义是:
<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)
给了我 null 。什么是正确的解决方案?
答案 0 :(得分:1)
尝试x:Name属性,而不是Name属性...
其次,您需要引用ItemTemplate,而不是TreeView的模板
此外,第二个参数必须是ListItem的容器,而不是数据项:
ContentPresenter container = (ContentPresenter) tree.ItemContainerGenerator.ContainerFromItem(item);
CheckBox box = (CheckBox) container.ContentTemplate.FindName("Foo", container);