Каков наилучший способ не допускать конфликт DependencyProperties с фактическими свойствами? - PullRequest
0 голосов
/ 20 мая 2009

Я обнаружил, что когда я делаю свойства зависимостей, большинство из них конфликтуют с именами свойств в UserControl, например, Background, Width и т. Д., Поэтому моя стратегия состоит в том, чтобы ставить префикс всем моим свойства с "The" , поэтому у меня есть, например,

  • TheBackground
  • TheWidth

и т.д.

Я попытался использовать ключевое слово "new", которое избавляет от предупреждения, но приводит к конфликтам во время выполнения.

Кто-нибудь сталкивался с лучшими стратегиями именования DependencyProperties в пользовательских элементах управления?

public partial class SmartForm : UserControl
{
    public SmartForm()
    {
        InitializeComponent();
        DataContext = this;

        TheBackground = "#FFD700";
    }

    #region DependencyProperty: TheBackground
    public string TheBackground
    {
        get
        {
            return (string)GetValue(TheBackgroundProperty);
        }
        set
        {
            SetValue(TheBackgroundProperty, value);
        }
    }

    public static readonly DependencyProperty TheBackgroundProperty =
        DependencyProperty.Register("TheBackground", typeof(string), typeof(SmartForm),
        new FrameworkPropertyMetadata());
    #endregion
}

Ответы [ 2 ]

5 голосов
/ 20 мая 2009

Если ваш UserControl имеет свойство background, зачем вам добавлять другое?

Для чего этот новый фон? "The"? Нет? Тогда какой фон это контролирует?

Завершите это предложение: «Это цвет фона для элемента управления XXXX».

Имя свойства теперь должно быть XXXXBackground.

0 голосов
/ 23 мая 2009

Вы хотите сказать, что хотите переопределить ??

В моем случае я не ставлю ширину как свойство DepedencyProperty

в моем пользовательском элементе управления:

    public double Width
    {
        get
        {
            if (_backgroundImage != null)
                return _backgroundImage.Width;
            else
                return double.NaN;
        }
        set
        {
            if (_backgroundImage != null)
                _backgroundImage.Width = value;
        }
    }

Компилятор показывает мне предупреждение, но, похоже, все работает.

...