Скрытие свойства зависимости - PullRequest
2 голосов
/ 17 февраля 2012

Просто интересно, является ли это хорошей практикой или это может вызвать какие-либо проблемы в долгосрочной перспективе.Честно говоря, я удивлен, что это даже работает - это делает работу, но я не уверен, рискованно ли это.

В основном мы создали NumericTextBox, который получен из TextBox, и переопределили свойство Text ключевым словом new, чтобы удалить запятые из текста:

public class NumericTextBox : TextBox
{
    public new string Text
    {
        get
        {
            return base.Text.Replace(",", String.Empty);
        }
        set
        {
            base.Text = value;
        }
    }
}

Что мне не нравится в этом, так это то, что я знаю, что Text является свойством зависимости, и мы переопределяем его, но, что удивительно, мы все равно можем связать его с XAML:мы называем textBox.Text мы получаем значения без запятых.

Что вы, ребята, думаете?

1 Ответ

0 голосов
/ 17 февраля 2012

Возможно, вам следует добавить свой класс в качестве владельца свойства зависимости и переопределить там методы получения и установки:

public class NumericTextBox : TextBox
{
    public NumericTextBox() { }
    public static readonly DependencyProperty NumericTextProperty = TextBox.TextProperty.AddOwner(typeof(NumericTextBox), new PropertyMetadata(null));
    public new string Text
    {
        get { return ((string)this.GetValue(NumericTextProperty )).Replace(",", String.Empty); }
        set { this.SetValue(NumericTextProperty , value); }
    }
}

У вас также есть возможность переопределения метаданные свойства зависимости для подключения к пользовательскому методу обратного вызова проверки.

Ваш подход не работает, потому что WPF на самом деле не использует свойства класса для изменения значения, но система свойств зависимости,Он просто вызывает метод SetValue, как вы делаете это в своем установщике свойств.Вы можете попробовать это, установив точку останова в установщике и изменив свойство привязки в графическом интерфейсе.Точка останова установщика никогда не будет достигнута.Но вы можете подключиться к событиям, указанным в метаданных свойства зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...