WPF: экземпляры свойств зависимостей общего ресурса usercontrol - PullRequest
3 голосов
/ 09 февраля 2011

Я создал usercontrol, и он прекрасно работает, но когда я помещаю два экземпляра этого элемента управления в одно окно, работает только последний из них. Я попытался найти решение, и я понял, что свойства зависимостей являются общими, но я не знаю, как заставить это работать.

Вот мое свойство зависимости:

    public double AnimatingVerticalOffset
    {
        get { return (double)GetValue(AnimatingVerticalOffsetProperty); }
        set { SetValue(AnimatingVerticalOffsetProperty, value); }
    }

    public static readonly DependencyProperty AnimatingVerticalOffsetProperty;

    static ListChooser()
    {
        ListChooser.AnimatingVerticalOffsetProperty =
                   DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged));
    }

1 Ответ

2 голосов
/ 09 февраля 2011

Само свойство зависимости должно быть статическим без привязки к одному экземпляру.И это относится и к его обратным вызовам (OnAnimationVerticalOffsetChanged в вашем случае) - это должны быть статические методы (не волнуйтесь, экземпляр объекта передается через его параметр, вам просто нужно выполнить приведение типа, чтобы убедиться, что объект соответствует типу, который выработают с).

Вы должны использовать статический инициализатор для инициализации DP, метод, который вы использовали (инициализация в конструкторе) работает, но DP будет перезаписывать для каждого экземпляра.

См.этот вопрос для более глубокого объяснения.

РЕДАКТИРОВАТЬ:

Исправленный код:

public double AnimatingVerticalOffset
{
    get { return (double)GetValue(AnimatingVerticalOffsetProperty); }
    set { SetValue(AnimatingVerticalOffsetProperty, value); }
}

public static readonly DependencyProperty AnimatingVerticalOffsetProperty =
               DependencyProperty.Register("AnimatingVerticalOffset", typeof(double), typeof(ListChooser), new UIPropertyMetadata(OnAnimationVerticalOffsetChanged));

static ListChooser()
{
}

Если обратный вызов не является статическим, вы получите ошибку компиляции (=>вы должны сделать его статическим).

РЕДАКТИРОВАТЬ:

Помните, что определение DP является статическим, а не значение свойства само по себе!DP работают точно так же, как и любое другое свойство, просто у него есть некоторые дополнительные функции: наследование значений, ставки, анимация ...

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