如何在不使用线程的情况下向WPF树视图添加展开前事件

本文关键字:视图 WPF 添加 事件 情况下 线程 | 更新日期: 2023-09-27 18:06:09

我试图添加一个进度条,当在树视图中单击展开项时将显示该进度条。这个栏应该在项目被点击后显示,一旦项目被展开就不可见。我试图为这个事件添加一个处理程序,我在这里找到

我是这样使用它的:

 treeItemsToAdd = new MyTreeViewItem();
 treeItemsToAdd.Expanding += treeItemsToAdd_Expanding;

我不明白为什么这不起作用…treeItemsToAdd_Expanding事件仅在项目展开后触发

如何在不使用线程的情况下向WPF树视图添加展开前事件

我建议重写OnExpanded虚拟方法,并在其默认实现之前引发expanded事件。

public class MyTreeViewItem : TreeViewItem
{
        public static readonly RoutedEvent CollapsingEvent =
        EventManager.RegisterRoutedEvent("Collapsing",
             RoutingStrategy.Bubble, typeof(RoutedEventHandler),
             typeof(MyTreeViewItem));
    public static readonly RoutedEvent ExpandingEvent =
             EventManager.RegisterRoutedEvent("Expanding",
             RoutingStrategy.Bubble, typeof(RoutedEventHandler),
             typeof(MyTreeViewItem));
    public event RoutedEventHandler Collapsing
    {
        add { AddHandler(CollapsingEvent, value); }
        remove { RemoveHandler(CollapsingEvent, value); }
    }
    public event RoutedEventHandler Expanding
    {
        add { AddHandler(ExpandingEvent, value); }
        remove { RemoveHandler(ExpandingEvent, value); }
    }
    protected override void OnExpanded(RoutedEventArgs e)
    {
        OnExpanding(new RoutedEventArgs(ExpandingEvent, this));
        base.OnExpanded(e);
    }
    protected override void OnCollapsed(RoutedEventArgs e)
    {
        OnCollapsing(new RoutedEventArgs(CollapsingEvent, this));
        base.OnCollapsed(e);
    }
    protected virtual void OnCollapsing(RoutedEventArgs e) { RaiseEvent(e); }
    protected virtual void OnExpanding(RoutedEventArgs e) { RaiseEvent(e); }
}