2010-05-04 4 views
1

Comment remplacer le TextPropertymétadonnées pour définir la UpdateSourceTrigger.PropertyChanged par défaut en utilisant la fonctionnalité de la base TextBox ClasseWPF TextBox TextProperty métadonnées override

TextBox.OnTextPropertyChanged 
TextBox.CoerceText 

méthodes, lorsque les deux mentionnés sont privés?

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)); 
... 

Répondre

3

Vous devriez être en mesure d'utiliser la méthode GetDefaultMetadata qui vous donnera accès aux callbacks qui se réfèrent aux méthodes privées.

Ce qui suit a fonctionné pour moi:

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)); 
    } 
}