2011-01-25 33 views
1

我有一個附加屬性(例如,它在TextBox內部大寫文本)。 Obvoiusly我必須訂閱TextBox的TextChanged事件才能在每次更新文本時使其大寫。WPF中的附加屬性和事件接線

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中(如果我理解正確的話)會創建一個強引用。這是否也意味着由於強大的引用GC不能收集TextBox?如果是的話 - 我應該在哪一點斷開事件,以便可以收集文本框?

+0

剛剛得到強壯的參考文獻從另一個方向(=>從TextBox到大寫),所以沒有收集文本框本身的問題。 – Jefim 2011-01-25 11:19:40

回答

1

該引用是另一種方式,即文本框保存對事件處理程序的引用。所以內存泄漏是不可能的。

+0

感謝您的澄清。 – Jefim 2011-01-25 12:17:34