WPF виртуализация холста - PullRequest
7 голосов
/ 18 мая 2009

У нас есть ряд прямоугольников, созданных внутри Canvas, и они вложены в следующем порядке. ScrollView> Canvas> VirtualizingStackPanel> Прямоугольники в XAML.

Похоже, что в Microsoft мало информации о том, в каких режимах поддерживается виртуализация senarios, и в тех случаях, когда не выдается ошибка, она просто обрабатывает ее как стандартную StackPanel.

Учитывая, что в каждый момент времени на экране отображается примерно 60 прямоугольников из общего количества около 800 на всем холсте, время загрузки около 5 минут является недопустимо медленным.

Мы уже пытались удалить ScrollView безрезультатно (кроме удаления полос прокрутки, производительность которых не улучшилась), и удалив некоторые другие элементы вложенности, чистый эффект, кажется, либо ничего не отображается, либо его отображается, но все еще медленно.

Лучшее решение, которое я нашел на данный момент, - это образец бесплатного программного кода VirtualizedCanvas, но он очень ограничен и не поддерживает ничего вложенного в него; фактически единственное входное действие - это набор элементов пользовательского интерфейса.

Это решение в основном игнорирует привязку данных и требует, чтобы вы передали ей завершенный Canvas, что делает весь наш существующий код и конвертеры довольно бесполезными, и это будет серьезной переработкой для реализации.

Есть ли способ просто обрезать виртуализацию холста, чтобы нарисовать только 60 наших элементов на экране?

1 Ответ

5 голосов
/ 07 сентября 2009
...