Silverlight 2 и большие холсты? - PullRequest
1 голос
/ 26 октября 2008

Я работаю над приложением, которое использует несколько больших элементов управления canvas (несколько тысяч пикселей в поперечнике), расположенных друг над другом. Сами элементы управления canvas полностью невидимы, но каждый из них содержит несколько элементов управления, в основном изображения.

Мой вопрос: есть ли рекомендуемый максимальный размер для холста или это просто проблема с памятью? А также, лучше ли нам устанавливать размер Canvas равным (0, 0) и использовать тот факт, что мы можем счастливо отображать элементы управления за пределами холста?

Спасибо

G

Ответы [ 2 ]

2 голосов
/ 14 июня 2009

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

Решение, которое вам понадобится, чтобы увеличить его, состоит в том, чтобы прокрутить себя и расположить объекты самостоятельно. По сути, вы воссоздаете холст. Это называется виртуализацией в терминах WPF.

Потребление памяти не будет больше в зависимости от размера холста, а зависит только от количества элементов управления и совокупного объема памяти этих элементов управления. Однако, если у вас будет много объектов WPF, фаза макета действительно занимает много времени с большим количеством (скажем, более 1000) объектов. Если это будет проблемой, вам нужно снова написать код и иметь кэш неиспользуемых объектов WPF того же типа (поскольку создание объектов WPF также довольно медленное).

1 голос
/ 28 октября 2008

Насколько я понимаю, внутренности Canvas не нуждаются в дополнительной памяти, чтобы быть больше.

Первое, что приходит мне в голову, имея Canvas ненулевого размера, это то, что он позволяет размещать предметы на нем относительно любого из четырех углов, что помогает, например, когда изменение размера контейнера.

...