2010-05-12 55 views
0

我正在開發(使用Silvelight 3)創建某種時間線並在其上放置對象的應用程序。爲此我需要一個非常大的Canvas(寬度高達2000000像素),但是每當我創建Canvas甚至是40000像素寬度時,它的行爲都非常奇怪,隨機消失。Silverlight中大畫布的問題

我在silverlight forumsstackoverflow上發現了一篇文章,描述了完全相同的問題。這似乎是自silverlight 2以來已知的問題,但我無法找到任何好的解決方法。有誰知道這種解決方法或可以檢查它仍然是Silverlight 4中的一個問題?

在此先感謝。

+1

創建一個自定義控件是否會更好地繪製剛剛在屏幕外(或重繪時間軸)和管理自定義滾動條的時間線的下一個(或上一個)部分? – Lazarus 2010-05-12 12:08:27

+0

當我發現問題時,這是我的第一個想法。但後來我想,也許有一個非常規的常見解決方案。 – Fury 2010-05-14 10:08:13

回答

1

一個響應的SO問題提到從點

的代表性問題源於「當心:一個 的Silverlight畫布的最大尺寸爲32767點 這是因爲大小。 UI元素的 未存儲爲浮點數,因爲它是在 WPF,但其中在32個數量 16比特形成大小的整數和 16比特形成它的浮動部分。

有足夠的精度但沒有足夠的範圍。一種可能的解決方案是在您將其添加到畫布時將所有點縮放到允許的範圍內。例如,除以1024將使您的200萬像素下降到ca的範圍。 2000年,在這個範圍之內,並且預測1/1024,它也在精度範圍之內。 (我們基本上只是將整個32位值,整數和小數部分移位10個位置,所以精度沒有損失,但是範圍增加。)

您甚至可以創建自定義容器來執行此映射爲你。

+0

不幸的是,縮放也是我的應用程序的任務之一,即我必須能夠將每100像素的縮放時間線改變1秒。所以這不是我的情況的解決方案。不過謝謝你的回答。 – Fury 2010-05-12 12:36:22

+2

我想你是從抽象的座標空間混合屏幕分辨率。你可以在屏幕上作爲你使用的座標變換。本質上,座標位於邏輯問題空間中,並且呈現是屏幕空間。您使用變換將窗體的邏輯空間轉換爲屏幕空間。這可以解決您的問題,大型座標值和縮放比例。請參閱UIElement上的RenderTransform。 – mdma 2010-05-12 14:27:36

+0

「我認爲你是從抽象座標空間混合屏幕分辨率」 確實是我。非常感謝這個建議。我已經解決了我的特殊問題,但我會記住未來的轉變。 – Fury 2010-05-14 10:19:04