Проблемы с рендерингом большой мозаичной карты в WPF

Как лучше всего управлять очень большим количеством изображений (более 10 000) в WPF? Это для редактора двухмерных карт, подобного этому: http://www.mapeditor.org/.

На данный момент у меня есть холст со всеми плитками в виде изображения и список, содержащий различные изображения на выбор. Каждая плитка добавляется на холст как дочерняя, а затем сохраняется в списке для последующего доступа. Вы рисуете на холсте, устанавливая для свойства «Источник» плитки значение, выбранное в списке. Он хорошо работает с тайловыми картами размером около 50x50, но все, что выше, вызывает задержки загрузки, в целом медленное приложение.

Любые предложения по этому поводу? Возможно, QT больше подходит вместо wpf?

заранее спасибо


person monokh    schedule 05.10.2011    source источник


Ответы (1)


Ознакомьтесь с серией статей Реализация виртуализированной панели.

Виртуализированные панели эффективны, потому что:

  • Только отображаемые элементы (и несколько дополнительных по краям для обеспечения плавной прокрутки) находятся в памяти (и отображаются).

  • Элементы используются повторно, а не повторно создаются и отбрасываются — старая ячейка просто заполняется новым содержимым (поставляется с новым DataContext) и используется в новом месте.

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

WPF, безусловно, может это сделать, если он реализован правильно (если вы можете сделать это в JavaScript, вы, безусловно, можете сделать это и в WPF).

person Matěj Zábský    schedule 05.10.2011