Это может звучать банально, но - Бесплатного ланча нет.
Я работал над этим в течение последних двух лет. Этот продукт состоит из 4 браузеров, чьи интерфейсы в основном ZUI. Все, кроме Атласа, используют визуальные эффекты для своего графического рендеринга, и было получено много уроков и несколько недостатков.
1) FrameworkElements не ваш друг. Движок FE на современной карте GFX и ЦП максимально разгоняется до 500-600 элементов, но это зависит от их сложности. FE примерно в 10 раз тяжелее визуальных.
2) Текст значительно повлияет на частоту кадров. Кривые рендеринга дорогие См. Пост Робби Ингебретсена для подсказок по использованию анимированного текста
3) Отбор важен, но добавление / удаление из VisualTree стоит дорого . Свертывание / сокрытие - это своего рода компромисс.
4) В WPF 3.5 у вас есть 2 варианта: запрограммировать до уровня Visuals или использовать что-то вроде Planerator , затем манипулировать камерой для панорамирования и масштабирования, но это требует от ваших пользователей хорошей карты gfx.
5) В WPF 4.0 дела обстоят намного лучше из-за того, что называется Cached Composition . Это работает по той же причине, по которой работает Planerator. Карта GFX отображает ваши элементы управления в растровое изображение и масштабирует растровое изображение.
Использовать это в 4,0 просто - настройка .CacheMode
для ваших самых дорогих FrameworkElements, и все станет намного быстрее. Вы также можете управлять сглаживанием текста и масштабами восстановления растровых изображений (EnableClearType
и RenderAtScale
)
.
В моем браузере Atlas я мог отображать более 700 фрагментов текста + простые прямоугольники, не теряя интерактивности панорамирования и масштабирования. До 4-х карта была непригодна для использования.
Улучшение интерактивных характеристик требует времени, целей и измерений. Удачи.
Kael Rowan имеет превосходную серию статей о ZoomableCanvas, над которым он работает. Он использует Quadtree и PriorityQueue для реализации и позволит вам реализовать семантическое увеличение.
Обновление: 8-07-10 Добавлены текстовые подсказки и ссылки ZoomableCanvas