在 TreeView 中查找 ItemTemplate 控件

3

我的树的定义是:

<TreeView Name="tree" ItemsSource="{Binding Children}" >
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <CheckBox Name="foo"></CheckBox>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

我有一个TreeViewItem元素,想要找到对应的复选框,但是

tree.Template.FindName("foo", item);

throws

[System.InvalidOperationException] = {"This operation is valid only on elements that have this template applied."}

并且
item.Template.FindName("foo", item)

这个给我返回了null。什么是正确的解决方案?

1个回答

2

尝试使用x:Name属性,而不是Name属性...

其次,您需要引用ItemTemplate,而不是TreeView的模板

另外,第二个参数必须是ListItem的容器,而不是数据项:

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

您的代码实际上返回了“null”容器,但使用以下代码:ContentPresenter container = FindVisualChild<ContentPresenter>(item);我得到了“foo”元素。谢谢! - alex2k8
有关在WPF ItemsControl中查找控件的详细信息,请参见https://dev59.com/BnNA5IYBdhLWcg3wZ85R。 - Jake1164

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接