取消订阅WPF控件中的事件

时间:2011-04-14 20:21:26

标签: wpf wpf-controls dispose

我有一个自定义控件,一个范围滑块,在我的一个视图中使用。

构造函数如下所示:

        EventHandler ReCalculateWidthsHandler;
        public RangeSlider()
        {
            ReCalculateWidthsHandler = OnReCalculateWidths;
            DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(RangeSlider)).
                AddValueChanged(this, ReCalculateWidthsHandler);
        }

我不知道何时/如何取消订阅该事件处理程序。 Control中没有Dispose方法。有什么方法可以通知我控制权被处理/删除,以便我可以取消订阅任何订阅的活动吗?

这可能是一个更普遍的问题:给定一个扩展Control的自定义控件,如何判断它何时被处理?

谢谢。

1 个答案:

答案 0 :(得分:2)

通常,您应该使用OverrideMetadata为依赖项属性添加更改处理程序。不幸的是,它不适用于只读属性。这就是我认为你使用属性描述符的原因。你知道这种方式太复杂了,因为AddValueChanged存储了导致内存泄漏的静态强引用。我认为你应该从SizeChanged事件调用ReCalculateWidthsHandler而不是订阅属性描述符。