【问题标题】:WPF: Invalidate controls in ControlTemplateWPF:使 ControlTemplate 中的控件无效
【发布时间】:2009-02-03 12:13:56
【问题描述】:

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

我已经设法通过将对象的模板设置为 null 然后将其重置回相同的模板来解决此问题,如下所示:

if (myObject.Template != null)
{
  ControlTemplate tmpTemplate = myObject.Template;
  myObject.Template = null;
  myObject.Template = tmpTemplate;
}

这可以解决问题,但我确信这不是应该的方式。我错过了什么?

【问题讨论】:

    标签: wpf decorator controltemplate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 2010-10-23
      • 1970-01-01
      • 2011-10-26
      相关资源
      最近更新 更多