wpf - 在 WPF 中渲染大型平铺 map 时出现问题

标签 wpf dictionary 2d tile

在 WPF 中管理大量图像(10,000+)的最佳方法是什么?这是用于类似于此的 2d 图 block map 编辑器:http://www.mapeditor.org/

目前,我有一个 Canvas ,其中所有图 block 都作为图像,还有一个列表框,其中包含可供选择的不同图像。每个图 block 都会作为子项添加到 Canvas 中,然后存储在列表中以供以后访问。您可以通过将图 block 的 Source 属性设置为列表框中选定的图 block 来在 Canvas 上进行绘制。它适用于大约 50x50 的图 block map ,但任何超过此范围的内容都会导致加载延迟,通常应用程序速度较慢。

对此有什么建议吗? QT 可能比 wpf 更适合吗?

提前致谢

最佳答案

查看Implementing virtualized panel系列文章。

虚拟面板非常高效,因为:

  • 只有显示的元素(以及边框周围的一些额外元素以实现平滑滚动)位于内存中(并进行渲染)。

  • 元素被重用,而不是重复创建和丢弃 - 旧单元格只需填充新内容(提供新的 DataContext)并在新位置使用。

您还可以尝试使用 WPF 的 DataGrid 来实现此目的,它支持开箱即用的虚拟化,并且本质上就是您想要做的事情。

如果实现得当,WPF 当然能够做到这一点(如果您可以在 JavaScript 中做到这一点,那么您当然也可以在 WPF 中做到这一点)。

关于wpf - 在 WPF 中渲染大型平铺 map 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665603/

相关文章:

python - 多处理池 : How to call an arbitrary list of methods on a list of class objects

python - 在 Python 中根据键匹配解压字典列表

python - 当我运行 pygame 时,它​​不会加载我的游戏?

android - SurfaceView 和 View 的区别?

c# - C# .WPF 中的线程调用

c# - LongListSelector 和 ContextMenu 返回错误的项目

python - 我怎样才能找到字典中值之间的所有差异?

c# - 获取周边广场

.net - Linq to SQL 创建表

c# - WPF MVVM 事件订阅