Проблема с большим холстом в Silverlight - PullRequest
0 голосов
/ 12 мая 2010

Я разрабатываю (используя Silvelight 3) приложение, которое создает какую-то временную шкалу и размещает на ней объекты. Для этого мне нужен действительно большой Canvas (шириной до 2000000 пикселей) с длинными линиями на нем, но всякий раз, когда я создаю Canvas шириной даже 40000 пикселей, он ведет себя очень странно, случайно исчезая.

Я нашел сообщение с описанием точно такой же проблемы на silverlight форумах и еще одно здесь на stackoverflow . Кажется, это известная проблема с Silverlight 2, но я не могу найти хорошего обходного пути. Кто-нибудь знает такой обходной путь или может проверить, по-прежнему ли это проблема в Silverlight 4?

Заранее спасибо.

1 Ответ

1 голос
/ 12 мая 2010

В одном из ответов на вопрос SO упоминается, что проблема проистекает из представления точек

"Осторожно: максимальный размер Холст Silverlight составляет 32767 баллов. Это потому что размер UIElements не хранится как поплавки, как в WPF, но в 32-битных количествах которых 16 бит образуют целое число размера и 16 бит формируют плавающую часть.

Достаточная точность, но недостаточный диапазон. Одним из возможных решений является масштабирование всех ваших точек в допустимый диапазон при добавлении их на холст. Например, деление на 1024 приведет к уменьшению ваших 2000000 пикселей до диапазона приблизительно. 2000, хорошо в пределах диапазона, и с прогнозом 1/1024, это также в точности. (По сути, мы просто сдвигаем все 32-битное значение, целую и дробную части на 10 позиций вправо, поэтому нет потери точности, но увеличен диапазон.)

Возможно, вам даже удастся создать собственный контейнер, который сделает это за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...