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 en pixels indépendants de l’appareil. Un pixel indépendant de l’appareil correspond à un quatre-vingt-seizième de pouce et est indépendant de la résolution, ce qui vous permet d'obtenir 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 mise en page 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 | 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 amarrage | 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 ainsi que leurs éléments enfants en fonction de la résolution de l'appareil de sortie ou de la taille, en pixels, de la police par défaut du conteneur. Pour plus d’informations, consultez Mise à l’échelle automatique dans Windows Forms. |
Conteneurs de mise en page | Les contrôles FlowLayoutPanel et TableLayoutPanel disposent leurs contrôles enfants et ajustent 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 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'étendre verticalement, un contrôle de ComboBox hébergé 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. Bien que les dimensions globales du contrôle soient mises à l'échelle, les contrôles enfants et les éléments constitutifs du contrôle peuvent 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 rendu au-dessus des éléments WPF.
Un contrôle Windows Forms hébergé est également dessiné par-dessus tous les éléments 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 mettre à l’échelle le contrôle hébergé ainsi que 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 s’adapte au degré pris en charge par des contrôles particuliers.
Remplacez la méthode ScaleChild pour fournir un comportement de mise à l’échelle personnalisé pour le contrôle Windows Forms hébergé.
En plus d'assurer 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 | 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ù 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 à l'entier inférieur. |
Déborder | Lorsque l’élément WindowsFormsHost est converti de valeurs double en valeurs int , le dépassement de capacité est possible. Les valeurs supérieures à MaxValue sont définies sur MaxValue. |
Propriétés liées à la mise en page
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 le mappage des propriétés de 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 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 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é :
L’élément WindowsFormsHost remplace 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 tente d'adapter le contrôle hébergé à la contrainte de taille donnée.
Si la propriété Size du contrôle hébergé correspond à la contrainte spécifiée, le contrôle hébergé est dimensionné à la 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 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 propriété Size 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 tronqué dans l'une ou l'autre direction.
Si la propriété Size 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
.NET Desktop feedback