我正在尝试在加载时为每个TreeViewItem
附加一些处理程序,然后在卸载时删除处理程序。
以下是我在自定义控件中的代码,该代码继承自TreeView
:
public ModdedTreeView()
{
this.AddHandler(TreeViewItem.LoadedEvent, new RoutedEventHandler(ItemLoaded));
this.AddHandler(TreeViewItem.UnloadedEvent, new RoutedEventHandler(ItemUnloaded));
}
protected void ItemLoaded(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item == null)
return;
item.AddHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed));
item.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(ItemExpanded));
item.AddHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(ItemSelected));
}
protected void ItemUnloaded(object sender, RoutedEventArgs e)
{
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item == null)
return;
item.RemoveHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed));
item.RemoveHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(ItemExpanded));
item.RemoveHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(ItemSelected));
}
修改
我仍然无法弄清楚发生了什么。它似乎只是在加载TreeView
加载的事件而不是TreeViewItem
加载的事件。
答案 0 :(得分:0)
Loaded是一个路由事件,因此您可以在OriginalSource
属性中找到它的源代码,该属性应该是触发事件的treeviewitem。
答案 1 :(得分:0)
显然,TreeViewItem.Loaded事件是一个直接事件。所以没有办法完成我的尝试。