2008-10-25 6 views
1

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

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

Спасибо,

G

ответ

1

Из моего понимания внутренностей Canvas, это не должно нуждаются в дополнительной памяти для того больше.

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

+0

Я согласен, что это правильно. Silverlight отображает только видимую область, поэтому части вашего холста, которые не видны, не будут отображаться и не будут потреблять память. – Bryant 2008-10-29 00:31:06

2

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

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

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

+0

Привет, Рутгер, я только что столкнулся с проблемой, которую вы описали. Я пытаюсь нарисовать большую диаграмму, которая простирается в 3 или 4 раза шире 32767 пикселей. Холст Silverlight не подходит для работы. Можете ли вы указать мне на информацию о создании виртуализованного холста? Или напишите мне письмо по адресу [email protected] – 2010-10-11 20:43:37