访问已由HierachicalDataTemplate修改的TreeViewItem中的UIElement

时间:2012-01-19 11:34:32

标签: c# silverlight xaml treeview treeviewitem

我的Silverlight 4应用程序包含树视图。我已经使用HierarchicalDataTemplate定制了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>

最终,我需要解析所有TreeViewItem并访问UIElement(即“BorderComponent”)。像这样:

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

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

任何想法,我如何在每个TreeViewItem中访问“BorderComponent”-item?

提前致谢,
弗兰克

1 个答案:

答案 0 :(得分:0)

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

要实际访问Border您也可以这样做,创建它的数据模板应该是HeaderTemplate的{​​{1}},我没有虽然使用了工具包,但我无法确定。在模板上使用TreeViewItem,您可以获得FindName