WPF:使ControlTemplate中的控件无效
我创建了一个decorator,它在OnRender方法中绘制一些自定义图形。图形取决于包含装饰器的对象的位置。我通过样式通过模板属性设置装饰器。问题是,应用模板时,装饰器的OnRender方法只调用一次。因此,当我更改对象的位置并对该对象调用InvalidateVisual()时,装饰器不会重新呈现 我已通过将对象的模板设置为null,然后将其重置回相同的模板来解决此问题,如下所示:WPF:使ControlTemplate中的控件无效,wpf,decorator,controltemplate,Wpf,Decorator,Controltemplate,我创建了一个decorator,它在OnRender方法中绘制一些自定义图形。图形取决于包含装饰器的对象的位置。我通过样式通过模板属性设置装饰器。问题是,应用模板时,装饰器的OnRender方法只调用一次。因此,当我更改对象的位置并对该对象调用InvalidateVisual()时,装饰器不会重新呈现 我已通过将对象的模板设置为null,然后将其重置回相同的模板来解决此问题,如下所示: if (myObject.Template != null) { ControlTemplate tmpT
if (myObject.Template != null)
{
ControlTemplate tmpTemplate = myObject.Template;
myObject.Template = null;
myObject.Template = tmpTemplate;
}
这确实奏效,但我相信这不是应该做的。我遗漏了什么?我想你可能是在否定错误的视觉效果。 尝试在对象类中声明全局变量以包含装饰器实例,重写装饰元素的OnApplyTemplate方法,并通过FindName方法调用将全局变量连接到模板中的装饰器实例。类似于:myDecorator=Template.FindName(“PART_decorator”,this)作为MyDecoratorType(注意,在本例中,xaml模板中的decorator应该有一个定义为“PART_decorator”的x:Name) 之后,您可以在代码中适当的地方对decorator实例调用InvalidateVisual()