2010-05-04 70 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)); 
    } 
}