我有一个自定义控件,一个范围滑块,在我的一个视图中使用。
构造函数如下所示:
EventHandler ReCalculateWidthsHandler;
public RangeSlider()
{
ReCalculateWidthsHandler = OnReCalculateWidths;
DependencyPropertyDescriptor.FromProperty(ActualWidthProperty, typeof(RangeSlider)).
AddValueChanged(this, ReCalculateWidthsHandler);
}
我不知道何时/如何取消订阅该事件处理程序。 Control中没有Dispose方法。有什么方法可以通知我控制权被处理/删除,以便我可以取消订阅任何订阅的活动吗?
这可能是一个更普遍的问题:给定一个扩展Control的自定义控件,如何判断它何时被处理?
谢谢。
答案 0 :(得分:2)
通常,您应该使用OverrideMetadata为依赖项属性添加更改处理程序。不幸的是,它不适用于只读属性。这就是我认为你使用属性描述符的原因。你知道这种方式太复杂了,因为AddValueChanged存储了导致内存泄漏的静态强引用。我认为你应该从SizeChanged事件调用ReCalculateWidthsHandler而不是订阅属性描述符。