我创建了一个在 OnRender 方法中绘制一些自定义图形的装饰器。图形取决于包含装饰器的对象的位置。我通过样式通过模板属性设置装饰器。问题是装饰器的 OnRender 方法在应用模板时只被调用一次。因此,当我更改对象的位置并在该对象上调用 InvalidateVisual() 时,不会重新渲染装饰器。
我设法通过将对象的模板设置为 null 然后将其重置回相同的模板来解决此问题,如下所示:
if (myObject.Template != null)
{
ControlTemplate tmpTemplate = myObject.Template;
myObject.Template = null;
myObject.Template = tmpTemplate;
}
这可以解决问题,但我确信这不是应该的方式。我错过了什么?