2012-11-13 63 views
0

我有一个参考FrameworkElement名为_frameworkElement 我需要在drawingContext上绘制一个FrameworkElementOnRender事件。如何在drawingContext上绘制FrameworkElement?

像这样:

protected override void OnRender(DrawingContext drawingContext) 
{ 
    drawingContext. ?? 
    base.OnRender(drawingContext); 
} 

我需要的是考虑任何渲染变换应用到这个问题的_frameworkElement

任何清晰的解决方案? 感谢

编辑

为什么我需要重写的OnRender:

因为我有一个图形化应用程序,用户可以绘制形状,并选择使用选择工具,将绘制多个形状矩形选择区域。

我所做的是我重新选择了从舞台画布选择的形状到选择画布,用户可以移动和调整大小,在选择画布上进行转换后,用户将点击舞台画布,然后将舞台形状重新设置到舞台上帆布。

问题:

从画布除去儿童帆布时,有一个瓶颈,Children.Remove & Children.Add将花费时间来实施,特别是当用户选择大量形状变换。

那么,

我认为不重新选择父的形状,而不是吸引他们的选择画布的的DrawingContext通过覆盖的OnRender

+1

你为什么要那样做?我想不出你需要在WPF中重写OnRender()的情况。请提供更多关于你想要做什么的细节。 –

+0

有些情况下需要重写。我用它来绘制实时数据表示(想象一下,如果你愿意的话,心脏EKG的种类),响应鼠标定位和事件。这是一个有效的场景。 但是,如果我们要帮助您达到目标,那么了解您需要完成的工作将会很有帮助。 :) – XamlZealot

+0

请参阅上面的编辑解释为什么我需要重写OnRender() – simo

回答

0

不是我不相信你能做到这一点,也没有真正意义。 DrawingContext对于每个UIElement都是唯一的,框架句柄在枚举时调用相应的绘图方法(例如每个元素都有它自己的OnRender通行证)。

我并不完全遵循你的设计+问题,但也许这些会有所帮助?

WPF canvas performance- children.add called many times

How to draw line of ten thousands of points with WPF within 0.5 second?

如果你需要深入了解WPF如何呈现,this是一个很好看的。

+0

非常感谢链接 – simo