2012-09-12 81 views
1

我有一些代码将一个画布的内容呈现为位图。定期地,Canvas的子元素可以在视觉上改变,我需要一种辨别这种情况的方式,以便我可以重新绘制位图。我最初的想法是重写Canvas.OnRender,但是当孩子重新呈现时,这似乎不会被调用。重新绘制WPF事件

任何建议,将不胜感激

回答

1

记住WPF未在框架基座重绘,但更多的脏区的概念。 OnRender也不像OnPaint,它用于创建一个缓存表示来呈现实际的内容,在大多数情况下,它不需要重新渲染以显示一些变化,这就是为什么它不被调用。要获得所需的效果,可以使用CompositionTarget.Rendering事件。它显然是最接近你的油漆事件。 但是有一个警告,您附加到该事件的那一刻,渲染行为发生了一些变化,检查this

另一个想法可能是查看VisualBrush

+0

问题在于它会不断发射,而不是在检测到脏区域时。表明某个地区已被标记为脏的事件将是理想的。我注意到在WPF性能套件中可以突出显示脏区域,因此这些数据必须在某处可用... – acron

+0

可以使用VisualBrush和Changed事件。 Snoop做类似的事情。 – dowhilefor

+0

我选择了VisualBrush,它的功能就像一个魅力,谢谢。 – acron