2010-05-04 31 views
1

在使用功能從基本TextBoxWPF的TextBox TextProperty元數據覆蓋

TextBox.OnTextPropertyChanged 
TextBox.CoerceText 

方法,當兩個提到的私有如何重寫TextProperty設置UpdateSourceTrigger.PropertyChanged 默認?

public class MyTextBox : System.Windows.Controls.TextBox 
    { 
     static MyTextBox() 
     { 

TextProperty.OverrideMetadata(typeof(TextBox), new FrameworkPropertyMetadata(
       string.Empty, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
       new PropertyChangedCallback(TextBox.OnTextPropertyChanged), 
       new CoerceValueCallback(TextBox.CoerceText), true, UpdateSourceTrigger.PropertyChanged)); 
... 

回答

3

您應該可以使用GetDefaultMetadata方法,該方法可以讓您訪問引用私有方法的回調。

以下爲我工作:

public class MyTextBox : TextBox 
{ 
    static MyTextBox() 
    { 
     var defaultMetadata = TextBox.TextProperty.GetMetadata(typeof(TextBox)); 

     TextBox.TextProperty.OverrideMetadata(typeof(MyTextBox), new FrameworkPropertyMetadata(
      string.Empty, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
      defaultMetadata.PropertyChangedCallback, 
      defaultMetadata.CoerceValueCallback, 
      true, 
      System.Windows.Data.UpdateSourceTrigger.PropertyChanged)); 
    } 
}