5


1

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

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

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

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

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

1 Answer


6


Ознакомьтесь с серией статей Implementing virtualized panel.

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

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

  • Элементы используются повторно, а не многократно создаются и удаляются

    • старая ячейка просто заполняется новым контентом (поставляется с новым DataContext) и используется в новом месте.

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

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