首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从自定义控件的模板部件中删除事件处理程序

从自定义控件的模板部件中删除事件处理程序
EN

Stack Overflow用户
提问于 2011-06-15 04:27:29
回答 2查看 3K关注 0票数 2

当我第一次开始编写WPF自定义控件时,如果我想添加事件处理程序,我会在获得模板部件后,在控件的OnApplyTemplate重写中执行此操作:

代码语言:javascript
复制
public void override OnApplyTemplate() {
  if ( addMenu != null ) {
    addMenu.Click -= addMenu_Click;
    addMenu = null;
  }
  addMenu = (MenuItem)Template.FindName("PART_AddMenu", this); 
  addMenu.Click += addMenu_Click;
}

但是有一天,我注意到OnApplyTemplate()并不总是在我期望的时候调用,即当控件与可视化树断开连接时。也就是说,使用上面的技术,事件处理程序不会总是被删除。所以我想出了一种不同的方法:

代码语言:javascript
复制
public MyCustomControl()
{
  Loaded += this_Loaded;
}

void this_Loaded(object sender, RoutedEventArgs e)
{
  Unloaded += this_Unloaded;

  addMenu = (MenuItem)Template.FindName("PART_AddMenu", this);
  addMenu.Click += addMenu_Click;
}

void this_Unloaded(object sender, RoutedEventArgs e)
{
  Unloaded -= this_Unloaded;

  if (addMenu != null)
  {
    addMenu.Click -= addMenu_Click;
    addMenu = null;
  }
}

这种方式似乎起到了作用。是否每个人都认为这是在自定义控件中挂接和删除事件处理程序的更好方法?如果没有,那是为什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6349695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档