WPF TextBox TextProperty переопределение метаданных - PullRequest
1 голос
/ 04 мая 2010

Как переопределить метаданные 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 Ответ

3 голосов
/ 13 октября 2010

Вы должны иметь возможность использовать метод 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)); 
    }
}
...