Question

Je dois implémenter un Canvas qui redimensionne son contenu en fonction de sa taille. Je sais qu'il existe une Viewbox , qui redimensionne tout ce qui se trouve à l'intérieur. Cependant, je ne peux pas l'utiliser car certains éléments ont une taille fixe et ne peuvent pas être redimensionnés.

Aussi, comment puis-je lier la taille du Canvas à l'élément parent (par exemple une fenêtre redimensionnable). Il y a sizeToContent pour Windows, je veux que la taille s'ajuste exactement à l'inverse. Le canevas utilise également des dessins basés sur la taille de l'élément d'hébergement, comment déclencher le rafraîchissement et comment puis-je m'assurer qu'il ne dessine que si sa taille est valide (ou minimale)?

Était-ce utile?

La solution

Si vous ne spécifiez pas de largeur ni de hauteur dans le document, celui-ci utilise automatiquement tout l'espace disponible. En effet, les valeurs VerticalAlignment et HorizontalAlignment par défaut sont définies sur Stretch .

Qu'entendez-vous par canevas qui redimensionne son contenu en fonction de sa taille sans redimensionner tout le contenu, car certains ont une taille fixe?

Mettre à jour après les commentaires

Si votre algorithme de dessin redimensionne déjà le contenu à la hauteur et à la largeur du canevas, il vous suffit de redimensionner le canevas pour qu’il corresponde à la zone. Dans ce cas, supprimez simplement les valeurs hauteur / largeur codées en dur et le canevas sera redimensionné pour s’adapter au conteneur.

Cependant, vous devrez peut-être utiliser ActualHeight / ActualWidth au lieu de Height / Width dans l'algorithme de dessin. ActualHeight / ActualWidth renvoie les valeurs que le conteneur de modèles donnera à votre canevas, de sorte qu'elles représentent les valeurs avec lesquelles le canevas est dessiné.

Autres conseils

Je pense que vous pouvez trouver les réponses à toutes vos questions dans mon Démo du métro de Londres .

Je le fais de mémoire, mais si je me souviens bien, une fenêtre utilise un panneau ou un canevas dans le cadre de son ControlTemplate (dans lequel se trouve le ContentPresenter), ce qui signifie qu'un canevas placé directement dans une fenêtre aura les problèmes de redimensionnement automatiquement comme ailleurs. Il existe quelques moyens de base pour résoudre ce problème.

1 Écrivez un nouveau ControlTemplate que votre fenêtre utilisera. :(
2 Placez votre contenu directement dans la fenêtre plutôt que dans un canevas à l'intérieur de la fenêtre.: /
3 Faites une liaison par nom. :)

<MyWindow x:Name="topWindow">
    <Canvas x:Name="topCanvas" Width="{Binding ElementName=topWindow, Path=ActualWidth}" Height="{Binding ElementName=topWindow, Path=ActualHeight}">
        ...Content...
    </Canvas>
</MyWindow>

(En l'occurrence, je lie souvent les grilles à l'intérieur des canevas de cette façon, afin de pouvoir facilement animer des éléments se déplaçant d'une position de la grille à une autre.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top