Considérations sur la disposition de l'élément WindowsFormsHost
Mise à jour : novembre 2007
Cette rubrique décrit comment l'élément WindowsFormsHost interagit avec le système de disposition WPF.
WPF et Windows Forms prennent en charge des logiques différentes mais comparables pour dimensionner et positionner des éléments sur un formulaire ou une page. Lorsque vous créez une interface utilisateur hybride qui héberge des contrôles Windows Forms dans le système WPF, l'élément WindowsFormsHost intègre les deux méthodes de disposition.
Différences de disposition entre Windows Presentation Foundation et Windows Forms
WPF utilise une disposition indépendante de la résolution. Toutes les dimensions de disposition WPF sont spécifiées à l'aide de pixels indépendants du périphérique. Un pixel indépendant du périphérique ou DIP (Device Independent Pixel) mesure un quatre-vingt-seizième d'un pouce et est indépendant de la résolution ; ainsi, le rendu obtenu sur un moniteur 72 ppp sera identique à celui obtenu sur une imprimante 19 200 ppp.
WPF est également basé sur la disposition dynamique. Cela signifie qu'un élément d'interface se positionne sur un formulaire ou une page en fonction de son contenu, de son conteneur de disposition parent et de la dimension d'écran disponible. La disposition dynamique facilite la localisation en ajustant automatiquement la taille et la position des éléments d'interface lorsque la longueur des chaînes qu'ils contiennent est modifiée.
La disposition dans Windows Forms est dépendante du périphérique et plus vraisemblablement statique. En général, les contrôles Windows Forms sont positionnés de façon absolue sur un formulaire à l'aide de dimensions spécifiées en pixels matériel. Toutefois, Windows Forms prend également en charge des fonctionnalités de disposition dynamique, comme décrit dans le tableau suivant.
Fonctionnalité de disposition |
Description |
---|---|
Redimensionnement automatique |
Certains contrôles Windows Forms se redimensionnent afin que leur contenu s'affiche correctement. Pour plus d'informations, consultez Vue d'ensemble de la propriété AutoSize. |
Ancrage |
Les contrôles Windows Forms prennent en charge le positionnement et le dimensionnement en fonction du conteneur parent. Pour plus d'informations, consultez les rubriques Control.Anchor et Control.Dock. |
Mise à l'échelle automatique |
Les contrôles conteneur se redimensionnent et redimensionnent leurs enfants selon la résolution du périphérique de sortie ou la taille, en pixels, de la police de conteneur par défaut. Pour plus d'informations, consultez Mise à l'échelle automatique dans les Windows Forms. |
Conteneurs de disposition |
Les contrôles FlowLayoutPanel et TableLayoutPanel organisent leurs contrôles enfants et se dimensionnent en fonction de leur contenu. |
Limitations de disposition
En général, vous ne pouvez pas mettre à l'échelle et transformer les contrôles Windows Forms autant que vous pouvez le faire dans WPF. La liste suivante décrit les limitations connues lorsque l'élément WindowsFormsHost essaie d'intégrer son contrôle Windows Forms hébergé dans le système de disposition WPF.
Dans certains cas, les contrôles Windows Forms ne peuvent pas être redimensionnés ou peuvent l'être uniquement à des dimensions spécifiques. Par exemple, un contrôle Windows FormsComboBox prend en charge la seule hauteur définie par la taille de police du contrôle. Dans une disposition dynamique WPF où les éléments peuvent être étirés verticalement, un contrôle ComboBox hébergé ne s'étirera pas comme prévu.
Les contrôles Windows Forms ne peuvent pas subir de rotation ni d'inclinaison. L'élément WindowsFormsHost déclenche l'événement LayoutError si vous effectuez une inclinaison ou une rotation. Si vous ne gérez pas l'événement LayoutError, une exception InvalidOperationException est levée.
Dans la plupart des cas, les contrôles Windows Forms ne prennent pas en charge la mise à l'échelle proportionnelle. Même si les dimensions générales du contrôle sont mises à l'échelle, les contrôles enfants et les éléments de composant du contrôle peuvent ne pas être redimensionnés comme prévu. Cette limitation dépend de la prise en charge de la mise à l'échelle de chaque contrôle Windows Forms. En outre, vous ne pouvez pas réduire de contrôles Windows Forms à une taille de 0 pixel.
Les contrôles Windows Forms prennent en charge la mise à l'échelle automatique, qui entraîne un redimensionnement automatique du formulaire et de ses contrôles en fonction de la taille de police. Dans une interface utilisateur WPF, la modification de la taille de police n'entraîne pas de redimensionnement de la disposition entière, bien que chaque élément individuel puisse être redimensionné dynamiquement.
Ordre de plan
Dans une interface utilisateur WPF, vous pouvez modifier l'ordre de plan des éléments afin d'en contrôler la superposition. Un contrôle Windows Forms hébergé est dessiné dans un handle de fenêtre (HWND) séparé ; ainsi, il apparaît toujours au dessus des éléments WPF.
Un contrôle Windows Forms hébergé sera également dessiné au dessus des éléments Adorner.
Comportement de disposition
Les sections suivantes décrivent les aspects spécifiques du comportement de disposition lorsque des contrôles Windows Forms sont hébergés dans WPF.
Mise à l'échelle, conversion d'unité et indépendance vis-à-vis du périphérique
Chaque fois que l'élément WindowsFormsHost exécute des opérations qui impliquent des dimensions WPF et Windows Forms, deux systèmes de coordonnées sont impliqués : un système de pixels indépendants du périphérique pour WPF et un système de pixels matériel pour Windows Forms. Par conséquent, vous devez appliquer des conversions d'unité et de mise à l'échelle appropriées afin d'obtenir une disposition cohérente.
La conversion entre les systèmes de coordonnées dépend de la résolution de périphérique actuelle et des transformations appliquées à la disposition ou au rendu de l'élément WindowsFormsHost ou de ses ancêtres.
Si le périphérique de sortie a une résolution de 96 ppp et si aucune mise à l'échelle n'a été appliquée à l'élément WindowsFormsHost, un pixel indépendant du périphérique équivaut à un pixel matériel.
Dans tous les autres cas, une mise à l'échelle des systèmes de coordonnées est requise. Le contrôle hébergé n'est pas redimensionné, mais l'élément WindowsFormsHost essaie de mettre à l'échelle le contrôle hébergé et tous ses contrôles enfants. Windows Forms ne prenant pas totalement en charge la mise à l'échelle, l'élément WindowsFormsHost est redimensionné en fonction des capacités de chaque contrôle.
Remplacez la méthode ScaleChild afin d'obtenir une mise à l'échelle personnalisée pour le contrôle Windows Forms hébergé.
Outre la mise à l'échelle, l'élément WindowsFormsHost gère les cas d'arrondi et de dépassement de capacité comme décrit dans le tableau suivant.
Problème de conversion |
Description |
---|---|
Arrondi |
Les dimensions des pixels indépendants du périphérique WPF sont spécifiées en tant que double, tandis que les dimensions des pixels matériel Windows Forms sont spécifiées en tant que int. Lorsque des dimensions de type double sont converties en dimensions de type int, l'élément WindowsFormsHost utilise l'arrondi standard, de sorte que les valeurs fractionnaires inférieures à 0,5 sont arrondies à 0. |
Dépassement de capacité |
Lorsque les dimensions de type double de l'élément WindowsFormsHost sont converties en int, un dépassement de capacité peut se produire. Les valeurs supérieures à la valeur MaxValue prennent la valeur MaxValue. |
Propriétés relatives à la disposition
Les propriétés qui contrôlent le comportement de disposition dans les contrôles Windows Forms et les éléments WPF sont mappées de manière appropriée par l'élément WindowsFormsHost. Pour plus d'informations, consultez Mappage de propriétés Windows Forms et WPF.
Modifications de disposition dans le contrôle hébergé
Les modifications apportées à la disposition dans le contrôle Windows Forms hébergé sont propagées à WPF afin de déclencher des mises à jour de disposition. La méthode InvalidateMeasure appliquée à l'élément WindowsFormsHost garantit que les modifications apportées à la disposition dans le contrôle hébergé provoquent l'exécution du moteur de présentation WPF.
Contrôles Windows Forms dimensionnés continuellement
Les contrôles Windows Forms qui prennent en charge la mise à l'échelle continue interagissent totalement avec le système de disposition WPF. L'élément WindowsFormsHost utilise les méthodes habituelles MeasureOverride et ArrangeOverride pour dimensionner et organiser le contrôle Windows Forms hébergé.
Dimensionnement de l'algorithme
L'élément WindowsFormsHost utilise la procédure suivante pour dimensionner le contrôle hébergé :
L'élément WindowsFormsHost substitue les méthodes MeasureOverride et ArrangeOverride.
Pour déterminer la taille du contrôle hébergé, la méthode MeasureOverride appelle la méthode GetPreferredSize du contrôle hébergé avec une contrainte traduite de la contrainte passée à la méthode MeasureOverride.
La méthode ArrangeOverride essaie d'affecter la contrainte de taille donnée au contrôle hébergé.
Si la propriété Size du contrôle hébergé correspond à la contrainte spécifiée, le contrôle hébergé est dimensionné selon cette contrainte.
Si la propriété Size ne correspond pas à la contrainte spécifiée, le contrôle hébergé ne prend pas en charge le dimensionnement continu. Par exemple, le contrôle MonthCalendar autorise uniquement des tailles discrètes. Les tailles autorisées pour ce contrôle sont des entiers (représentant le nombre de mois), pour la hauteur et la largeur. Dans les cas comme celui-ci, l'élément WindowsFormsHost se comporte comme suit :
Si la propriété Size retourne une taille supérieure à la contrainte spécifiée, l'élément WindowsFormsHost découpe le contrôle hébergé. La hauteur et la largeur sont gérées séparément ; le contrôle hébergé peut donc être découpé en hauteur comme en largeur.
Si la propriété Size retourne une taille inférieure à la contrainte spécifiée, l'élément WindowsFormsHost accepte cette valeur et la retourne au système de disposition WPF.
Voir aussi
Tâches
Procédure pas à pas : disposition de contrôles Windows Forms dans Windows Presentation Foundation
Disposition de contrôles Windows Forms dans Windows Presentation Foundation, exemple
Concepts
Mappage de propriétés Windows Forms et WPF