2009-02-03 3 views
0

Я создал декоратор, который рисует какую-то пользовательскую графику в методе OnRender. Графика зависит от положения объекта, содержащего декоратор. Я установил декоратор через свойство Шаблон через стиль. Проблема заключается в том, что метод OnRender декоратора вызывается только один раз при применении шаблона. Поэтому, когда я изменяю позицию объекта и вызываю InvalidateVisual() на этом объекте, декоратор не перерисовывается.WPF: недействительные элементы управления в ControlTemplate

мне удалось обойти это, установив шаблон объекта в нуль, а затем сбросить его обратно в тот же шаблон, как это:

Это делает трюк, но я уверен, что это не так, как это должно быть сделано. Что мне не хватает?

ответ

0

Я полагаю, вы можете признать недействительным неправильный визуальный. Попробуйте объявить глобальную переменную в вашем классе объектов, чтобы содержать экземпляр декоратора, переопределить метод OnApplyTemplate украшенного элемента и связать глобальную переменную с экземпляром декоратора в шаблоне с помощью вызова метода FindName. Что-то вроде: myDecorator = Template.FindName («PART_decorator», это) как MyDecoratorType (обратите внимание, что в этом случае декоратор в шаблоне xaml должен иметь x: Name, определяемый как «PART_decorator»).

После этого вы можете вызвать InvalidateVisual() против экземпляра декоратора, где это необходимо в вашем коде.

Смежные вопросы