La Force d'un Contrôle WPF personnalisé pour redimensionner correctement
J'ai écrit un WPF de contrôle de l'utilisateur et une partie de elle implique dynamiquement ajouter des éléments à une toile d'effets à la hauteur de ladite toile. La toile est imbriquée à l'intérieur d'une grille. Quand j'ai ajouter dynamiquement mes éléments de la hauteur de la toile changements, mais la toile finit par s'étendant au-delà du bord de l'ensemble de contrôle, plutôt que de provoquer le contrôle de redimensionner et de le rendre plus grand.
Comment puis-je la force le contrôle de redimensionner correctement?
J'ai l'impression que j'ai besoin d'appeler ou de remplacer les Mesurer ou de les Arranger, mais j'ai pas de chance avec l'une ou l'autre méthode, peut – être parce que je suis d'appeler avec des paramètres incorrects ou peut-être parce qu'ils ne sont pas les bonnes méthodes à appeler.
- Êtes-vous à l'aide de Mélange à tous?
- Je suis arrivé à cette question parce que moi aussi je suis dynamiquement l'ajout d'éléments à un contrôle et il n'est pas le redimensionnement, même si j'ai remplacé MeasureOverride (qui fonctionne). Le problème est de forcer un réorganiser des éléments de l'INTERFACE utilisateur lors de chaque nouvel élément ajouté, de sorte qu'ils se déplacent pour accueillir la croissance.
- J'ai résolu mon problème, et il semble que la ItemsChanged événement n'a en effet d'invalider la mise en page et la force d'une mise à jour. Josh juste titre, explique que la mise en œuvre d'une coutume MeasureOverride fonctionne.
Vous devez vous connecter pour publier un commentaire.
Votre problème, c'est que les panneaux de Toile ne sont pas redimensionner pour s'adapter à leur contenu.
Vous référer à Mesurer et à Organiser. Êtes-vous familier avec WPF deux passes système de mise en page? Lisez cet article pour plus d'informations: WPF Système de Mise en page.
Cet article décrit également quels sont les différents panneaux de faire pour la mise en page. Chaque type de panneau est différent.
Dans WPF, les éléments sont d'abord l'occasion de déterminer de quelle taille ils seront. Les panneaux peuvent déterminer la taille en fonction de la taille de leurs enfants, ou ils peuvent demander de taille fixe quelle que soit la taille de leurs enfants. La toile est un exemple de ce dernier.
Éléments sont ensuite dit de quelle taille ils seront, et a demandé à organiser eux-mêmes et leurs enfants.
La Grille type de panneau permet non seulement de lignes et de colonnes, mais est également très bon à l'ajustement automatique de la taille du contenu.
Le StackPanel un type qui n'est pas autosize à tous dans la dimension dans laquelle il est orienté, mais il autosize dans l'autre dimension.
Toile de réglage de taille automatique pour remplir un espace, mais cela ne lui permet enfants à l'auto taille. Il puise ses enfants aux coordonnées spécifiées et ne se soucie pas comment ils sont gros.
Je suggère d'essayer une Grille avec seulement une ligne/colonne.
Ou vous pouvez créer une nouvelle Toile de la classe qui a le mieux de redimensionnement automatique des capacités. Au cours de mesure, vous souhaitez mesurer les éléments d'enfant et la taille de votre Toile en conséquence. Vous pouvez trouver une classe comme cela utile en bas de la route.
Voici un article sur Mise En Page Automatique en WPF.
Si vous souhaitez créer un panneau personnalisé, voici une sous-rubrique sur elle: Panneau Personnalisé Éléments.
EDIT:
Une chose de plus: Vous pouvez également lier la largeur/hauteur de l'élément enfant de l'ActualWidth et ActualHeight sur la toile afin que l'enfant va ajuster la taille de son parent. Vous pouvez utiliser un convertisseur de définir un ratio de la taille si nécessaire.
avez-vous essayer d'envelopper tout (votre contrôle personnalisé contenu) dans un Viewbox?
par exemple
Vous avez besoin de remplacer MeasureOverride méthode de contrôle et de retour à la taille désirée (de la taille de votre toile) à partir de là. Ensuite, le parent le contrôle de redimensionner lui-même pour accueillir l'enfant (s'il le peut).
Vous pouvez utiliser un UniFormGrid à cette archive. Ensemble de Colonnes ou de lignes est égal à 1, de sorte que vous pouvez obtenir vertical/horizontal disposés des éléments de