Aligner des éléments dans un panneau de stack?

Je me demandais si je pouvais avoir 2 contrôles dans un StackPanel à orientation horizontale afin que le bon élément soit placé sur le côté droit du StackPanel.

J’ai essayé ce qui suit mais cela n’a pas fonctionné:

 Left 

Dans l’extrait ci-dessus, je souhaite que le bouton soit ancré sur le côté droit du StackPanel.

Note: il faut que ce soit fait avec StackPanel, pas avec Grid, etc.

Vous pouvez y parvenir avec un DockPanel :

  Left   

La différence est qu’un StackPanel organisera les éléments enfants en une seule ligne (verticale ou horizontale) alors qu’un DockPanel définira une zone où vous pouvez organiser les éléments enfants horizontalement ou verticalement les uns par rapport aux autres (la propriété Dock modifie la position d’un élément). Les propriétés d’alignement, telles que HorizontalAlignment , modifient la position d’un élément par rapport à son élément parent).

Mettre à jour

Comme indiqué dans les commentaires, vous pouvez également utiliser la propriété FlowDirection d’un StackPanel . Voir la réponse de @ D_Bester.

Vous pouvez définir FlowDirection du Stack panel sur RightToLeft , puis tous les éléments seront alignés sur le côté droit.

Pour ceux qui se heurtent à cette question, voici comment réaliser cette mise en page avec une Grid :

     

crée

 Server: http://127.0.0.1 

Impossible de faire fonctionner ceci avec un DockPanel comme je le souhaitais et inverser la direction du stream d’un StackPanel est gênant. L’utilisation d’une grid n’est pas une option, car les éléments à l’intérieur de celle-ci peuvent être masqués lors de l’exécution et je ne connais donc pas le nombre total de colonnes au moment de la conception. La solution la meilleure et la plus simple que je puisse trouver est la suivante:

          

Cela entraînera l’alignement des contrôles à l’intérieur du StackPanel sur le côté droit de l’espace disponible, quel que soit le nombre de contrôles, à la fois lors de la conception et de l’exécution. Yay! 🙂

         

Cela fonctionne parfaitement pour moi. Il suffit de mettre le bouton en premier car vous commencez à droite. Si FlowDirection devient un problème, ajoutez simplement un StackPanel et spécifiez FlowDirection = “LeftToRight” pour cette partie. Ou spécifiez simplement FlowDirection = “LeftToRight” pour le contrôle correspondant.

   Left      

pour Windows 10, utilisez relativePanel au lieu du panneau de stack et utilisez

relativepanel.alignrightwithpanel = “true”

pour les éléments contenus.

Si vous rencontrez un problème comme celui que j’avais lorsque les étiquettes étaient centrées dans mon panneau de stack vertical, assurez-vous d’utiliser des contrôles de largeur complète. Supprimez la propriété Width ou placez votre bouton dans un conteneur pleine largeur permettant l’alignement interne. WPF consiste à utiliser des conteneurs pour contrôler la mise en page.

  Left     

StackPanel vertical avec étiquette gauche suivi du bouton droit

J’espère que ça aide.

Peut-être pas ce que vous voulez si vous devez éviter les valeurs de taille codées en dur, mais parfois j’utilise un “shim” (séparateur) pour cela: