树视图中任何项目的 OnExpanded 事件

Posted

技术标签:

【中文标题】树视图中任何项目的 OnExpanded 事件【英文标题】:OnExpanded event for any item in a treeview 【发布时间】:2010-11-26 03:45:11 【问题描述】:

我想为我的树视图中的树视图项的任何扩展获取事件。

这个原因,和原来的问题有点无关: 我正在创建一个与 xml 文件树密切相关的树,但我允许在 xml 中包含一个包含元素,因此树可以跨越多个文件。我想在展开时在我的树视图中设置树视图项的 itemssource 属性。

【问题讨论】:

【参考方案1】:

您可以使用TreeViewItem.Expanded 事件作为附加事件:

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded"
          ItemsSource="Binding">
    ...
</TreeView/>

在代码隐藏中,您可以使用OriginalSource 属性识别启动事件的TreeViewItem

    private void TreeViewItem_Expanded(object sender, RoutedEventArgs e)
    
        TreeViewItem tvi = e.OriginalSource as TreeViewItem;
        if (tvi != null)
        
            MessageBox.Show(string.Format("TreeNode '0' was expanded", tvi.Header));
        
    

【讨论】:

如果你的意思是视觉后代,你可以通过TreeViewItem的ItemsContainerGenerator获取它们 这很有帮助,谢谢,我希望有赏金给你。最后总结:我想要的视觉后代在扩展事件期间尚未创建。在展开事件中,我保存了 OriginalSource,然后在绑定的任意转换器方法中,我使用 ItemContainerGenerator.ContainerFromIndex(i) 获得了视觉后代并更新了 ItemsSource。

以上是关于树视图中任何项目的 OnExpanded 事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 在树视图中选择一个项目?

突出显示被拖动的 TreeView 项目

TreeView 项目更改事件

带有复选框的 C# WPF 目录树视图:检查构建项目失败,PropertyChanged 为空

单击空白区域时如何处理事件?

如何在 WPF 中创建可编辑的树列表视图?