WPF TextBox TextProperty元数据覆盖

时间:2010-05-04 07:06:42

标签: wpf textbox metadata override

如何覆盖TextProperty 元数据以设置UpdateSourceTrigger.PropertyChanged 默认情况下使用基础TextBox

中的功能
TextBox.OnTextPropertyChanged
TextBox.CoerceText

方法,当两者都是私有的时候?

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

1 个答案:

答案 0 :(得分: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)); 
    }
}