2011-10-01 15 views
5

既定の依存関係プロパティのメタデータをオーバーライドする方法。例えば、 ;テキストボックスのTextプロパティ。 私はこのコード方法:依存関係プロパティのメタデータをオーバーライドします。

  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(",","");   
    } 

を使用しますが、これは、両方の実行(設定、取得)

では誰も私を助けることはできません!!!:((ここでは(

+1

可能な複製[継承された依存関係プロパティのデフォルト値を変更するにはどうすればよいですか?](http://stackoverflow.com/questions/5653364/how-can-i-change-the-default-value-of- an-inherited-dependency-property) –

+0

私はconst値を使用しません。 –

答えて

19

は、派生クラスの例です。オーバーライドはstatic construcで場所であることを

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

は予告:TextBoxからTextプロパティのメタデータをオーバーライド通常のコンストラクタではありません。

+0

ありがとう、私はwpfでこのコードが欲しいです。 [get {return text.replace();} se {text = value;}] –

+0

これはWPFコードです。それがカスタムコントロールを行う方法です(UIElementから派生したクラスの静的コンストラクタでメタデータをオーバーライドする)。 –

+0

Textプロパティを取得するときに値を変更するにはどうすればいいですか? –

関連する問題