Je me demandais si je pouvais avoir 2 contrôles dans un StackPanel orienté horizontalement afin que le bon élément soit ancré sur le côté droit du StackPanel.
J'ai essayé ce qui suit mais cela n'a pas fonctionné:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
Dans l'extrait de code ci-dessus, je veux que le Button soit ancré sur le côté droit de StackPanel.
Remarque: j'ai besoin que cela soit fait avec StackPanel, pas Grid, etc.
wpf
layout
wpf-controls
stackpanel
alignment
Shimmy Weitzhandler
la source
la source
Réponses:
Vous pouvez y parvenir avec
DockPanel
:La différence est que a
StackPanel
organisera les éléments enfants en une seule ligne (verticale ou horizontale) tandis que aDockPanel
définit une zone dans laquelle vous pouvez organiser les éléments enfants horizontalement ou verticalement, les uns par rapport aux autres (laDock
propriété change la position d'un élément par rapport à l'autre éléments dans le même conteneur. Les propriétés d'alignement, telles que laHorizontalAlignment
modification de la position d'un élément par rapport à son élément parent).Mettre à jour
Comme indiqué dans les commentaires, vous pouvez également utiliser la
FlowDirection
propriété de aStackPanel
. Voir la réponse de @ D_Bester .la source
LastChildFill="False"
-le<DockPanel LastChildFill="False">
, voir stackoverflow.com/a/9599290/4573839Yo peut mettre
FlowDirection
deStack panel
àRightToLeft
, puis tous les articles seront alignés sur le côté droit.la source
Pour ceux qui trébuchent sur cette question, voici comment réaliser cette mise en page avec un
Grid
:crée
la source
Impossible de faire fonctionner cela en utilisant un DockPanel tout à fait comme je le souhaitais et inverser le sens du flux d'un StackPanel est gênant. L'utilisation d'une grille n'est pas une option car les éléments à l'intérieur peuvent être cachés au moment 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:
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! :)
la source
Cela fonctionne parfaitement pour moi. Mettez simplement le bouton en premier puisque vous commencez par la droite. Si FlowDirection devient un problème, ajoutez simplement un StackPanel autour de lui et spécifiez FlowDirection = "LeftToRight" pour cette partie. Ou spécifiez simplement FlowDirection = "LeftToRight" pour le contrôle pertinent.
la source
la source
pour Windows 10, utilisez relativePanel au lieu de stack panel et utilisez
pour les éléments contenus.
la source
Si vous rencontrez un problème comme celui que j'ai eu à l'endroit où les étiquettes étaient centrées dans mon panneau de pile verticale, assurez-vous d'utiliser des contrôles pleine largeur. Supprimez la propriété Width ou placez votre bouton dans un conteneur pleine largeur qui permet un alignement interne. WPF consiste à utiliser des conteneurs pour contrôler la disposition.
Vertical StackPanel avec étiquette gauche suivie du bouton droit
J'espère que ça aide.
la source
Peut-être pas ce que vous voulez si vous devez éviter les valeurs de taille de codage en dur, mais parfois j'utilise un "shim" (séparateur) pour cela:
la source