Несколько моментов, чтобы обдумать ...
Из вашей темы я понял, что вы не хотите, чтобы способность узлов перерисовывалась, так как это может сделать их медленнее. Вместо этого вы хотите решить, когда и какой узел рисовать. Я прав?
Ну, это выглядит нормально для меня, однако Canvas
никогда не виртуализируется. Я рекомендую перейти на сайт Codeplex и загрузить исходный код WPFToolkit
. В DataVisualization
пространстве имен у вас есть несколько элементов управления диаграммами (даже ScatterredChart, которые похожи на ваши, где линии не рисуются между узлами) и их исходный код. Посмотрите, что они сделали. Как они увеличили производительность своих графических инструментов.
Я также натолкнулся на эту статью о том, как реализовать Scrollable Virtualized Canvas . Вероятно, это поможет вам добиться быстрой визуализации узлов поверх canvas.
Лично ...
1] Геометрии легки, и они мне нравятся.
2] Визуальное HitTesting может помочь вам понять, находится ли элемент в области рендеринга, то есть в пределах представления прокрутки. В противном случае сделайте его скрытым, чтобы он не рисовал сам себя. «Скрытый», а не «Свернутый», потому что режим работы с прокруткой будет работать нормально.
3] Я помню, как мой коллега использовал даже виртуализированную стековую панель с горизонтальной ориентацией, чтобы она отображала узлы, и вид блока , то есть область, специфичная для одной точки на оси X, чтобы такие повторяющиеся области автоматически помещались вместе, чтобы получить монолитный график.
Замечательно, что имплементация была!
Всего наилучшего и держите нас в курсе ваших успехов в этом.