2008-10-25 6 views
1

Je travaille sur une application qui utilise plusieurs grands contrôles de canevas (plusieurs milliers de pixels), superposés les uns sur les autres. Les contrôles de toile eux-mêmes sont complètement invisibles, mais chacun contient un certain nombre de contrôles, principalement des images.Silverlight 2 et de grandes toiles?

Ma question est la suivante: existe-t-il une taille maximale recommandée pour une toile ou s'agit-il uniquement d'un problème de mémoire? Et aussi, vaut-il mieux régler la taille du Canevas à (0, 0) et faire usage du fait que nous pouvons heureusement rendre les contrôles en dehors des limites de la toile?

Merci,

G

Répondre

1

De ma compréhension des entrailles de Canvas, il devrait pas avoir besoin de mémoire supplémentaire pour être plus grand.

La première chose qui me vient à l'esprit d'avoir un Canvas de taille non nulle est qu'il permet d'y placer des objets relativement à l'un des quatre coins, ce qui aide, par ex. redimensionner le conteneur.

+0

Je suis d'accord que c'est correct. Silverlight ne restitue que la zone visible, donc les parties de votre toile qui ne sont pas visibles ne seront pas rendues et ne consommeront pas de mémoire. – Bryant

2

Attention: la taille maximale d'une toile Silverlight est de 32767 points. Cela est dû au fait que la taille de UIElements n'est pas stockée en tant que flottants comme c'est le cas dans WPF, mais en quantités de 32 bits dont 16 bits forment l'entier de taille et 16 bits forment la partie flottante de celui-ci. Donc, assurez-vous que votre toile n'est pas plus grande que cela et ne le sera pas.

La solution dont vous auriez besoin pour l'agrandir est de faire vous-même le défilement et de positionner vous-même les objets. En effet, vous recréerez la toile. C'est ce qu'on appelle la virtualisation en termes de WPF.

La consommation de mémoire ne sera pas plus importante en fonction de la taille du canevas mais dépend uniquement du nombre de contrôles et de la taille de la mémoire cumulée de ces contrôles. Cependant, si vous avez beaucoup d'objets WPF, la phase de mise en page prend beaucoup de temps avec plus d'objets (disons plus de 1000). Si vous rencontrez un problème, vous devez le coder de nouveau et avoir un cache d'objets WPF inutilisés du même type (car la création d'objet WPF est également assez lente).

+0

Salut Rutger, je viens de rencontrer le problème que vous avez décrit. J'essaye de dessiner un grand diagramme qui s'étend 3 ou 4 fois plus large que 32767 pixels. Le canevas Silverlight n'est pas à la hauteur. Pouvez-vous me diriger vers des informations sur la création d'une toile virtualisée? Ou envoyez-moi un email à [email protected] s'il vous plaît. –