访问已由层次结构数据模板修改的TreeViewItem中的UIElement

本文关键字:修改 TreeViewItem 中的 UIElement 层次结构 数据 访问 | 更新日期: 2023-09-27 18:20:41

我的Silverlight 4应用程序包含一个树视图。我已经用层次结构数据模板定制了TreeViewItems的外观:

<sdk:TreeView x:Name="TreeViewModel" ItemTemplate="{StaticResource DataTemplateTreeViewDisplayObjects}" .../>
<sdk:HierarchicalDataTemplate x:Key="DataTemplateTreeViewDisplayObjects" ItemsSource="{Binding Children}">
  <Grid>
    <Border x:Name="BorderComponent" .../>
  </Grid>
</sdk:HierarchicalDataTemplate>

最终,我需要解析所有TreeViewItems并访问一个UIElement(即"BorderComponent")。像这样:

foreach (TreeViewItem tvi in _myTreeView.Items)
  tvi.BorderComponent.Visibility = Visibility.Collapsed

显然这不起作用,因为Items将返回绑定对象。即使我可以访问TreeViewItem(_myTreeView.ItemContainerGenerator.ContainerFromIndex(0)作为TreeViewItem来获取第一个),我也不知道如何访问Border,因为TreeViewItem不知道用于创建项的层次结构数据模板。

你知道我如何访问每个TreeViewItem中的"BorderComponent"项吗?

提前感谢,
Frank

访问已由层次结构数据模板修改的TreeViewItem中的UIElement

您应该避免直接访问UI组件,只需将Visibility绑定到项上的属性并将其设置为Collapsed即可。

要真正访问Border,你可能也可以这样做,创建它的数据模板应该在TreeViewItemHeaderTemplate中找到,不过我还没有使用Toolkit,所以我不能肯定地告诉你。使用模板上的FindName,您可能可以获得Border