【问题标题】:Silverlight 2 and large canvases?Silverlight 2 和大画布?
【发布时间】:2008-10-25 23:51:39
【问题描述】:

我正在开发一个应用程序,该应用程序使用多个大型画布控件(跨越数千像素),彼此分层。画布控件本身是完全不可见的,但每个都包含许多控件,主要是图像。

我的问题是,是否有推荐的画布最大尺寸,还是纯粹是内存问题?此外,我们是否最好将 Canvas 大小设置为 (0, 0) 并利用我们可以愉快地在画布边界之外渲染控件的事实?

谢谢,

G

【问题讨论】:

    标签: c# silverlight silverlight-2.0


    【解决方案1】:

    注意:Silverlight 画布的最大尺寸为 32767 点。这是因为 UIElements 的大小不像 WPF 中那样存储为浮点数,而是以 32 位的数量存储,其中 16 位形成大小的整数,16 位形成它的浮点部分。因此,请确保您的画布不会比这更大,也不会更大。

    您需要使其更大的解决方案是自己进行滚动并自己定位对象。实际上,您正在重新创建画布。这在 WPF 术语中称为虚拟化。

    内存消耗不会因画布大小而变大,而仅取决于控件的数量和这些控件的累积内存大小。但是,如果您将拥有大量 WPF 对象,则布局阶段确实需要相当长的时间来处理更多(例如,超过 1000 个)对象。如果这将是一个问题,您需要自己重新编写代码并缓存相同类型的未使用 WPF 对象(因为 WPF 对象创建也很慢)。

    【讨论】:

    • 嗨,Rutger,我刚刚遇到了您描述的问题。我正在尝试绘制一个比 32767 像素宽 3 或 4 倍的大图表。 Silverlight 画布无法胜任这项工作。你能告诉我有关创建虚拟画布的信息吗?或者请给我发电子邮件至 simon@ams.co.nz。
    【解决方案2】:

    根据我对Canvas内部结构的理解,它应该不需要额外的内存来变大。

    我想到有一个非零大小的Canvas 的第一件事是,它允许人们相对于四个角中的任何一个将物品放在上面,这在例如调整容器大小。

    【讨论】:

    • 我同意这是正确的。 Silverlight 仅渲染可见区域,因此不可见的画布部分不会被渲染,也不会消耗内存。
    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2010-11-05
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多