我正在开发一个使用多个大型画布控件(跨越数千像素)的应用程序,这些控件相互分层。画布控件本身是完全不可见的,但每个都包含许多控件,主要是图像。
我的问题是,是否有推荐的画布最大尺寸,还是纯粹是内存问题?此外,我们是否最好将 Canvas 大小设置为 (0, 0) 并利用我们可以愉快地在画布边界之外渲染控件的事实?
谢谢,
G
我正在开发一个使用多个大型画布控件(跨越数千像素)的应用程序,这些控件相互分层。画布控件本身是完全不可见的,但每个都包含许多控件,主要是图像。
我的问题是,是否有推荐的画布最大尺寸,还是纯粹是内存问题?此外,我们是否最好将 Canvas 大小设置为 (0, 0) 并利用我们可以愉快地在画布边界之外渲染控件的事实?
谢谢,
G
注意:Silverlight 画布的最大尺寸为 32767 点。这是因为 UIElements 的大小不像 WPF 中那样存储为浮点数,而是以 32 位的数量存储,其中 16 位形成大小的整数,16 位形成它的浮点部分。因此,请确保您的画布不会比这更大,也不会更大。
您需要使其更大的解决方案是自己进行滚动并自己定位对象。实际上,您正在重新创建画布。这在 WPF 术语中称为虚拟化。
内存消耗不会因画布大小而变大,而仅取决于控件的数量和这些控件的累积内存大小。但是,如果您将拥有大量 WPF 对象,则布局阶段确实需要相当长的时间来处理更多(例如,超过 1000 个)对象。如果这将是一个问题,您需要自己重新编写代码并缓存相同类型的未使用 WPF 对象(因为 WPF 对象创建也很慢)。
根据我对内部结构的理解Canvas
,它应该不需要额外的内存来变大。
对于非零尺寸,我想到的第一件事Canvas
是它允许一个人相对于四个角中的任何一个将物品放在上面,这在调整容器大小时会有所帮助。