Partager via


Considérations relatives à la disposition de l’élément WindowsFormsHost

Cette rubrique décrit comment l’élément WindowsFormsHost interagit avec le système de disposition WPF.

WPF et Windows Forms prennent en charge différentes logiques, mais similaires, pour le dimensionnement et le positionnement d’é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 WPF, l’élément WindowsFormsHost intègre les deux schémas de disposition.

Différences de disposition entre WPF 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 de l’appareil. Un pixel indépendant de l’appareil est un quatre-vingt-seizième de pouce de taille et indépendant de la résolution, vous obtenez donc des résultats similaires, que vous affichiez sur un moniteur de 72 ppp ou sur une imprimante de 19 200 ppp.

WPF est également basé sur la disposition dynamique. Cela signifie qu’un élément d’interface utilisateur se organise sur un formulaire ou une page en fonction de son contenu, de son conteneur de disposition parent et de la taille d’écran disponible. La disposition dynamique facilite la localisation en ajustant automatiquement la taille et la position des éléments d’interface utilisateur lorsque les chaînes qu’elles contiennent changent de longueur.

La disposition dans Windows Forms dépend de l’appareil et est plus susceptible d’être statique. En règle générale, les contrôles Windows Forms sont positionnés absolument sur un formulaire à l’aide de dimensions spécifiées en pixels matériels. Toutefois, Windows Forms prend en charge certaines fonctionnalités de disposition dynamique, comme résumé dans le tableau suivant.

Fonctionnalité de mise en page Descriptif
Redimensionnement automatique Certains contrôles Windows Forms se redimensionnent pour afficher correctement leur contenu. Pour plus d’informations, consultez Vue d’ensemble de la propriété AutoSize.
Ancrage et accostage Les contrôles Windows Forms prennent en charge le positionnement et le dimensionnement en fonction du conteneur parent. Pour plus d’informations, consultez Control.Anchor et Control.Dock.
Mise à l’échelle automatique Les contrôles de conteneur se redimensionnent eux-mêmes et leurs enfants en fonction de la résolution de l’appareil de sortie ou de la taille, en pixels, de la police de conteneur par défaut. Pour plus d’informations, consultez Mise à l'échelle automatique dans Windows Forms.
Boîtes de mise en page Les contrôles FlowLayoutPanel et TableLayoutPanel arrangent leurs contrôles enfants et ajustent leur taille selon leur contenu.

Limitations de mise en page

En général, les contrôles Windows Forms ne peuvent pas être mis à l’échelle et transformés dans la mesure du possible dans WPF. La liste suivante décrit les limitations connues lorsque l’élément WindowsFormsHost tente 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 ne peuvent être dimensionnés qu’en dimensions spécifiques. Par exemple, un contrôle de ComboBox Windows Forms ne prend en charge qu’une seule hauteur, définie par la taille de police du contrôle. Dans une disposition dynamique WPF où les éléments peuvent s’étirer verticalement, un contrôle hébergé ComboBox ne s’étend pas comme prévu.

  • Les contrôles Windows Forms ne peuvent pas être pivotés ou asymétriques. L’élément WindowsFormsHost déclenche l’événement LayoutError si vous appliquez une transformation d’asymétrie ou de rotation. Si vous ne gérez pas l’événement LayoutError, un InvalidOperationException est déclenché.

  • Dans la plupart des cas, les contrôles Windows Forms ne prennent pas en charge la mise à l’échelle proportionnelle. Les dimensions globales du contrôle sont mises à l’échelle, mais les contrôles enfants et les composants du contrôle risquent de ne pas être redimensionnés comme prévu. Cette limitation dépend de la façon dont chaque contrôle Windows Forms prend en charge la mise à l’échelle. En outre, vous ne pouvez pas mettre à l’échelle les contrôles Windows Forms jusqu’à une taille de 0 pixels.

  • Les contrôles Windows Forms prennent en charge la mise à l’échelle automatique, dans laquelle le formulaire se redimensionne automatiquement et ses contrôles en fonction de la taille de police. Dans une interface utilisateur WPF, la modification de la taille de police ne redimensionne pas toute la disposition, même si des éléments individuels peuvent être redimensionnés dynamiquement.

Ordre Z

Dans une interface utilisateur WPF, vous pouvez modifier l’ordre z des éléments pour contrôler le comportement qui se chevauche. Un contrôle Windows Forms hébergé est dessiné dans un HWND distinct, par conséquent, il est toujours affiché au-dessus des éléments WPF.

Un contrôle Windows Forms hébergé est également dessiné par-dessus tout élément Adorner.

Comportement de mise en page

Les sections suivantes décrivent des aspects spécifiques du comportement de disposition lors de l’hébergement de contrôles Windows Forms dans WPF.

Mise à l’échelle, conversion unitaire et indépendance de l’appareil

Chaque fois que l’élément WindowsFormsHost effectue des opérations impliquant des dimensions WPF et Windows Forms, deux systèmes de coordonnées sont impliqués : les pixels indépendants de l’appareil pour WPF et les pixels matériels pour Windows Forms. Par conséquent, vous devez appliquer des conversions d’unités et de mise à l’échelle appropriées pour obtenir une disposition cohérente.

La conversion entre les systèmes de coordonnées dépend de la résolution actuelle de l’appareil et des transformations de disposition ou de rendu appliquées à l’élément WindowsFormsHost ou à ses ancêtres.

Si le périphérique de sortie est de 96 ppp et qu’aucune mise à l’échelle n’a été appliquée à l’élément WindowsFormsHost, un pixel indépendant de l’appareil est égal à un pixel matériel.

Tous les autres cas nécessitent une mise à l’échelle du système de coordonnées. Le contrôle hébergé n’est pas redimensionné. Au lieu de cela, l’élément WindowsFormsHost tente de redimensionner le contrôle hébergé et tous ses contrôles enfants. Étant donné que Windows Forms ne prend pas entièrement en charge la mise à l’échelle, l’élément WindowsFormsHost est mis à l’échelle jusqu’au degré pris en charge par des contrôles particuliers.

Substituez la méthode ScaleChild pour fournir un comportement de mise à l'échelle personnalisé pour le contrôle Windows Forms hébergé.

En plus de la mise à l’échelle, l’élément WindowsFormsHost gère les cas d’arrondi et de débordement, comme décrit dans le tableau suivant.

Problème de conversion Descriptif
Arrondi Les dimensions de pixel indépendantes de l’appareil WPF sont spécifiées en tant que double, et les dimensions de pixels matériels Windows Forms sont spécifiées en tant que int. Dans les cas où les dimensions basées sur double sont converties en dimensions basées sur int, l’élément WindowsFormsHost utilise l’arrondi standard, de sorte que les valeurs fractionnaires inférieures à 0,5 soient arrondies à 0.
Dépassement Lorsque l’élément WindowsFormsHost convertit les valeurs du format double au format int, le dépassement de capacité est possible. Les valeurs qui sont plus grandes que MaxValue sont définies à MaxValue.

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 de disposition dans le contrôle Windows Forms hébergé sont propagées à WPF pour déclencher des mises à jour de disposition. La méthode InvalidateMeasure sur WindowsFormsHost garantit que les changements de disposition du contrôle hébergé provoquent l'exécution du moteur de mise en page WPF.

Contrôles Windows Forms redimensionnés de manière continue

Les contrôles Windows Forms qui prennent en charge la mise à l’échelle continue interagissent entièrement avec le système de disposition WPF. L’élément WindowsFormsHost utilise les méthodes MeasureOverride et ArrangeOverride comme d’habitude pour dimensionner et organiser le contrôle Windows Forms hébergé.

Algorithme de dimensionnement

L’élément WindowsFormsHost utilise la procédure suivante pour dimensionner le contrôle hébergé :

  1. L’élément WindowsFormsHost remplace les méthodes MeasureOverride et ArrangeOverride.

  2. 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 issue de celle passée à la méthode MeasureOverride.

  3. La méthode ArrangeOverride tente d'appliquer le contrôle hébergé à la contrainte de taille donnée.

  4. Si la propriété du Size contrôle hébergé correspond à la contrainte spécifiée, le contrôle hébergé est dimensionné à la contrainte.

Si la Size propriété ne correspond pas à la contrainte spécifiée, le contrôle hébergé ne prend pas en charge le dimensionnement continu. Par exemple, le MonthCalendar contrôle autorise uniquement les tailles discrètes. Les tailles autorisées pour ce contrôle se composent d’entiers (représentant le nombre de mois) pour la hauteur et la largeur. Dans les cas suivants, l’élément WindowsFormsHost se comporte comme suit :

  • Si la Size propriété retourne une taille supérieure à la contrainte spécifiée, l'élément WindowsFormsHost clipe le contrôle hébergé. La hauteur et la largeur sont gérées séparément, de sorte que le contrôle hébergé peut être coupé dans un sens ou l'autre.

  • Si la Size propriété retourne une taille inférieure à la contrainte spécifiée, WindowsFormsHost accepte cette valeur de taille et retourne la valeur au système de disposition WPF.

Voir aussi