我有一个附加属性(例如,它大写文本框中的文本)。显然,我必须订阅 TextBox 的 TextChanged 事件,以便在每次文本更新时将其大写。
public class Capitalize
{
// this is for enabling/disabling capitalization
public static readonly DependencyProperty EnabledProperty;
private static void OnEnabledChanged(
DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
var tb = d as TextBox;
if ((bool)e.NewValue)
{
tb.TextChanged += new TextChangedEventHandler(tb_TextChanged);
}
else
{
tb.TextChanged -= new TextChangedEventHandler(tb_TextChanged);
}
}
}
正如我们所看到的,我们向 TextBox 添加了事件处理程序(如果我理解正确的话)创建了一个强引用。这是否也意味着由于强大的 ref GC 无法收集 TextBox?如果是 - 我应该在什么时候取消连接事件以便可以收集 TextBox?