2012-03-01 4 views
2

Я рисую довольно сложный «образ» (который часто нуждается в обновлении и имеет множество примитивов рисования) в окне WPF, переопределяя метод OnRender отдельного UIElement и используя DrawingContext, чтобы напрямую рисовать примитивы.Как рисунок с DrawingContext в OnRender работает за сценой?

Мой вопрос: что именно происходит за кулисами? Насколько я понимаю, это не использование сохраненного режима (что было бы, если бы я помещал фигуры в элемент управления). Я задаю вопрос, потому что мне очень хочется, чтобы такой рисунок фактически использовал GDI + на задней панели, которая приносит свои проблемы (например, печатная продукция, нарисованная с помощью GDI +, уже стоила нам времени и усилий).

Есть ли хорошие ресурсы (помимо очевидных ресурсов MSDN, которые не казались, чтобы иметь возможность просветить меня?

Или у меня есть все, что совершенно неправильно?

Спасибо за любые ответы указывая мне в правильном направлении. [edit: spelling]

ответ

1

Вы по-прежнему используете сохраненный режим, вы просто не используете объекты высокого уровня (без анимационных объектов и т. д.), а вместо этого простые точки, линии и т. д.

Я врылся в источники DrawingContext и из того, что я могу сказать, он, кажется, толкает все эти команды DrawXYZ в очередь с использованием некоторого низкоуровневого wizardry (сама очередь состоит из произвольно заданных структур, каждая из которых обозначает определенную команду).

WPF затем обрабатывает эту очередь в другом потоке, обозначая поток рендеринга в вопросе this. Я не проверил это, но я предполагаю, что WPF использует StreamingContext для всего чертежа.

Кроме того, WPF использует DirectX для рендеринга, как видно на рисунке this bogpost, который лучше разбирается в том, что делает WPF.

Надеюсь, это прояснит вам все.

+0

Большое спасибо, я уже подозревал об этом, но всегда приятно быть уверенным. – Daniel