2

我通过覆盖单独的 UIElement 的 OnRender 方法并使用 DrawingContext 直接绘制基元,在 WPF 窗口中绘制了一个相当复杂的“图像”(通常需要刷新并具有许多绘图基元)。

我的问题是,幕后究竟发生了什么?据我了解,这不是使用保留模式(如果我将 Shapes 放入控件中就会出现这种情况)。我问这个问题是因为我担心这样的绘图实际上只会在后面使用 GDI+,这会带来它自己的问题(例如,打印用 GDI+ 绘制的东西已经花费了我们的时间和精力)。

是否有任何好的资源(除了似乎无法启发我的明显 MSDN 资源?

还是我完全错了?

感谢您为我指明正确方向的任何答案。[编辑:拼写]

4

1 回答 1

1

您仍在使用保留模式,只是没有使用高级对象(没有动画对象等),而是使用简单的点、线等。

我已经深入研究了 DrawingContext 的来源,据我所知,它似乎正在使用一些低级魔法将所有这些 DrawXYZ 命令推入队列(队列本身由任意大小的结构组成,每个结构都表示某个命令) .

WPF 然后在另一个线程上处理这个队列,在这个问题中表示渲染线程。我还没有验证这一点,但我猜测 WPF 使用 StreamingContext 进行所有绘图。

此外,WPF 正在使用 DirectX 进行渲染,正如这篇博文所示,它更好地了解了 WPF 的实际作用。

我希望这可以为您澄清事情。

于 2013-02-11T07:14:59.477 回答