Partager via


Considérations sur 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 neuf-sixième pouce de taille et indépendant de la résolution. Vous obtenez donc des résultats similaires, que vous soyez rendu à un moniteur de 72 ppp ou à 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 disposition Description
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 ancrage 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.
Conteneurs de disposition Les FlowLayoutPanel contrôles et TableLayoutPanel les contrôles organisent leurs contrôles enfants et leur taille en fonction de leur contenu.

Limitations de disposition

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 Windows Forms ComboBox 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 événement 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 de plan

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. Il est donc toujours dessiné sur les éléments WPF.

Un contrôle Windows Forms hébergé est également dessiné sur tous les Adorner éléments.

Comportement de disposition

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 l’appareil de sortie est de 96 ppp et qu’aucune mise à l’échelle n’a été appliquée à l’élément, un pixel indépendant de l’appareil WindowsFormsHost 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 mettre à l’échelle 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.

Remplacez la méthode pour fournir un ScaleChild 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épassement de capacité, comme décrit dans le tableau suivant.

Problème de conversion Description
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ù doubleles dimensions basées sur -sont converties en intdimensions basées sur la base, 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 des double valeurs en int valeurs, le dépassement de capacité est possible. Valeurs supérieures MaxValue à MaxValuecelles définies sur .

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 InvalidateMeasure méthode sur WindowsFormsHost garantit que les modifications de disposition dans le contrôle hébergé entraînent l’exécution du moteur de disposition WPF.

Contrôles Windows Forms dimensionnés en continu

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 et ArrangeOverride les MeasureOverride méthodes 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 et ArrangeOverride les MeasureOverride méthodes.

  2. Pour déterminer la taille du contrôle hébergé, la MeasureOverride méthode appelle la méthode du GetPreferredSize contrôle hébergé avec une contrainte traduite de la contrainte passée à la MeasureOverride méthode.

  3. La ArrangeOverride méthode tente de définir le contrôle hébergé sur 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 extrait 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 les deux sens.

  • 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