2011-10-01 13 views
5

cómo sobrescribir los metadatos de propiedad de dependencia predeterminados. por ejemplo; Propiedad de texto para el cuadro de texto. utilizo este códigoCómo: Reemplazar metadatos para una propiedad de dependencia

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

     TextBox.TextProperty.OverrideMetadata(typeof(UCTextBox), 
    new   FrameworkPropertyMetadata(string.Empty, 
     FrameworkPropertyMetadataOptions.Journal | 
    FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
     defaultMetadata.PropertyChangedCallback, 
     new CoerceValueCallback(CoerceText) 
     )); 
} 

    private static object CoerceText(DependencyObject d, object value) 
    { 
    return value.ToString().Replace(",","");   
    } 

pero esto En ambas carreras (get, set)

Nadie me puede ayudar !!!: (((

+1

posible duplicado de [¿Cómo puedo cambiar el valor predeterminado de una propiedad de dependencia heredada?] (Http://stackoverflow.com/questions/5653364/how-can-i-change-the-default-value-of- an-inherited-dependency-property) –

+0

no uso un valor const. –

Respuesta

19

Aquí es un ejemplo de una clase derivada de TextBox anulando los metadatos para la propiedad Text:

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 

public class MyTextBox : TextBox 
{ 
    static MyTextBox() 
    { 
     TextBox.TextProperty.OverrideMetadata(typeof(MyTextBox), 
      new FrameworkPropertyMetadata(string.Empty, 
       FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | 
       FrameworkPropertyMetadataOptions.Journal, 
       null, /* property changed callback */ 
       null, /* coerce value callback */ 
       true, /* is animation prohibited */ 
       UpdateSourceTrigger.LostFocus)); 
    } 
} 

en cuenta que la anulación es el lugar en el static construc tor, no el constructor ordinario.

+0

gracias, quiero este código en wpf. [get {return text.replace();} se {text = value;}] –

+0

Este es el código WPF. Esa es la manera de hacer controles personalizados (es decir, reemplazar los metadatos en un constructor estático de una clase que se deriva de UIElement). –

+0

¿cómo cambio el valor cuando obtengo propiedad de texto? –

Cuestiones relacionadas