如何在不使用线程的情况下将扩展前事件添加到wpf树视图中

时间:2013-03-26 14:56:57

标签: c# wpf treeview

我正在尝试添加一个进度条,当在树状视图中单击展开的项目时将显示该进度条。单击项目后应立即显示此栏,并在项目展开后使其不可见。我试图为这个事件添加一个处理程序,我发现here ,但它不起作用。

我正在使用它:

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

我无法弄清楚为什么这不起作用......只有在项目展开后才会触发treeItemsToAdd_Expanding事件

1 个答案:

答案 0 :(得分:-1)

我建议覆盖OnExpanded虚方法,并在默认实现之前引发Expanding事件。

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); }
}