Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight中的大画布问题_Silverlight_Canvas_Size - Fatal编程技术网

Silverlight中的大画布问题

Silverlight中的大画布问题,silverlight,canvas,size,Silverlight,Canvas,Size,我正在开发(使用Silvelight 3)一个应用程序,它可以创建某种时间线并在上面放置对象。为此,我需要一个非常大的画布(高达2000000像素宽),上面有长线,但每当我创建画布时,即使是40000像素宽,它的行为也非常奇怪,随机消失 我在网上找到了一篇文章,描述了完全相同的问题,在网上还有一篇文章。这似乎是自silverlight 2以来的一个已知问题,但我找不到任何好的解决方法。有没有人知道这样的解决方法,或者可以检查Silverlight 4中是否仍然存在问题 提前感谢。对SO问题的一个

我正在开发(使用Silvelight 3)一个应用程序,它可以创建某种时间线并在上面放置对象。为此,我需要一个非常大的画布(高达2000000像素宽),上面有长线,但每当我创建画布时,即使是40000像素宽,它的行为也非常奇怪,随机消失

我在网上找到了一篇文章,描述了完全相同的问题,在网上还有一篇文章。这似乎是自silverlight 2以来的一个已知问题,但我找不到任何好的解决方法。有没有人知道这样的解决方法,或者可以检查Silverlight 4中是否仍然存在问题


提前感谢。

对SO问题的一个回答提到了问题的根源,即点的表示

“注意:最大尺寸的 Silverlight canvas是32767点。 这是因为元素的大小不同 并不像在中那样存储为浮动 WPF,但其数量为32位 16位构成大小和的整数 16位构成它的浮动部分

精度足够,但范围不够。一种可能的解决方案是,在将所有点添加到画布时,将它们缩放到允许的范围内。例如,除以1024将使2000000像素下降到约2000的范围内,在该范围内,如果预测值为1/1024,则也在精度范围内。(我们基本上只是将整个32位值、整数和小数部分10右移,因此精度没有损失,但范围增加了。)


您甚至可以创建自定义容器来为您进行此映射。

创建一个自定义控件来在屏幕外绘制时间线的下一(或上一)部分(或重新绘制时间线)不是更好吗管理自定义滚动条?这是我发现问题时的第一个想法。但后来我想,也许有一个标准的通用解决方案。不幸的是,缩放也是我的应用程序的任务之一,也就是说,我必须能够将缩放时间线每100像素更改1秒。因此,在我的情况下,这不是一个解决方案。但感谢您的支持不管怎样,你的答案是正确的。我认为你把屏幕分辨率从抽象坐标空间混合起来了。你可以在屏幕上画出你所用坐标的变换。基本上坐标在你的逻辑问题空间中,而展示就是屏幕空间。你用变换把你的逻辑空间转换成屏幕空间。这个解决方法这是你的两个问题,一个是大坐标值,另一个是演示缩放。请参阅UIElement上的RenderTransform。“我认为你是在从抽象坐标空间混合屏幕分辨率”的确是。非常感谢你的建议。我已经解决了我的特定问题,但我会记住未来的转换。