【问题标题】:Access UIElement in a TreeViewItem that has been modified by a HierachicalDataTemplate访问由 HierachicalDataTemplate 修改的 TreeViewItem 中的 UIElement
【发布时间】:2012-01-19 11:34:31
【问题描述】:

我的 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 来获取第一个),我也不知道如何访问边框,因为 TreeViewItem 不知道 HierarchicalDataTemplate,即用于创建项目。

知道如何访问每个 TreeViewItem 中的“BorderComponent”项吗?

提前致谢,
弗兰克

【问题讨论】:

    标签: c# silverlight xaml treeview treeviewitem


    【解决方案1】:

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

    要实际访问Border,您可能也可以这样做,创建它的数据模板应该在TreeViewItem 的HeaderTemplate 中找到,虽然我没有使用过工具包所以我不能肯定地告诉你。在模板上使用FindName,您也许可以得到Border。

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多