2009-02-03 74 views
0

我创建了一个装饰器,它在OnRender方法中绘制了一些自定义图形。图形取决于包含装饰器的对象的位置。我通过Style来通过Template属性设置装饰器。问题是装饰器的OnRender方法在应用模板时只调用一次。因此,当我更改对象的位置并在该对象上调用InvalidateVisual()时,装饰器不会被重新渲染。WPF:使ControlTemplate中的控件失效

我已经设法通过设置对象的模板为空,然后重置回相同的模板像这样来解决此:

这是卓有成效的,但我敢肯定,这是不是它应该完成的方式。我错过了什么?

回答

0

我想你可能会使错误的视觉无效。 尝试在对象类中声明全局变量以包含装饰器实例,并通过FindName方法调用覆盖装饰元素的OnApplyTemplate方法,并使用装饰器实例连线全局变量。例如:myDecorator = Template.FindName(“PART_decorator”,this)as MyDecoratorType(请注意,在这种情况下,xaml模板中的装饰器应该将x:Name定义为“PART_decorator”)。

之后,您可以在适当的代码中针对装饰器实例调用InvalidateVisual()。