Я создал декоратор, который рисует некоторую пользовательскую графику в методе OnRender. Графика зависит от положения объекта, содержащего декоратор. Я устанавливаю декоратор через свойство Template через Style. Проблема в том, что метод OnRender декоратора вызывается только один раз при применении шаблона. Поэтому, когда я меняю положение объекта и вызываю InvalidateVisual () для этого объекта, декоратор не перерисовывается.
Мне удалось обойти это, установив для шаблона объекта значение null, а затем сбросив его обратно на тот же шаблон, как этот:
if (myObject.Template != null)
{
ControlTemplate tmpTemplate = myObject.Template;
myObject.Template = null;
myObject.Template = tmpTemplate;
}
Это делает трюк, но я уверен, что это не так, как это должно быть сделано. Чего мне не хватает?