Почему не все события в элементах управления WPF - PullRequest
0 голосов
/ 20 августа 2011

Я хочу использовать событие TreeView.AfterCollapse в WPF. Есть ли способ использовать его ?? и почему не все события поддерживаются в WPF? Спасибо

Ответы [ 2 ]

6 голосов
/ 20 августа 2011

TreeViewItem имеет событие Collapsed, которое эквивалентно событию AfterCollapsed в Windows Forms. Это событие первоначально вызывается TreeViewItem, а не TreeView, но, поскольку это событие всплеска, оно также вызывается на TreeView впоследствии, так что вы можете обработать его на этом уровне, если вам нужно. Вы можете использовать свойство OriginalSource для получения TreeViewItem, вызвавшего событие:

XAML

<TreeView TreeViewItem.Collapsed="TreeViewItem_Collapsed" ...>

Код-за

private void TreeViewItem_Collapsed(object sender, RoutedEventArgs e)
{
    TreeViewItem tvi = (TreeViewItem)e.OriginalSource;
    ...
}
0 голосов
/ 20 августа 2011

Вы можете расширить объект TreeViewItem, чтобы добавить эту функцию.

Ниже приведен пример, который я использовал.Это от Вэй Чжоу, чьи сообщения MSDN спасли меня пару раз:

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); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...