Question

Je me demandais si je peux avoir 2 commandes dans un StackPanel horizontal orienté de sorte que l'élément droit devrait être arrimé sur le côté droit du StackPanel.

J'ai essayé ce qui suit, mais il ne fonctionne pas:

<StackPanel Orientation="Horizontal">
    <TextBlock>Left</TextBlock>
    <Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>

Dans l'extrait ci-dessus, je veux que le bouton à quai sur le côté droit du StackPanel.

Note:. J'ai besoin d'être fait avec StackPanel, pas de grille etc

Était-ce utile?

La solution

Vous pouvez y parvenir avec un DockPanel:

<DockPanel Width="300">
    <TextBlock>Left</TextBlock>
    <Button HorizontalAlignment="Right">Right</Button>
</DockPanel>

La différence est que StackPanel organisera des éléments enfants dans seule ligne (verticale ou horizontale), tandis que a réponse de D_Bester.

Autres conseils

Yo peut mettre FlowDirection de Stack panel à RightToLeft, puis tous les articles seront alignés sur le côté droit.

Pour ceux qui trébuchent sur cette question, voici comment réaliser cette mise en page avec a Grid:

<Grid>
    <TextBlock Text="Server:"/>
    <TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>

crée

Server:                                                                   http://127.0.0.1

Impossible d'obtenir ce travail à l'aide d'un DockPanel tout à fait la façon dont je voulais et inverser le sens d'écoulement d'un StackPanel est gênant. L'utilisation d'une grille est pas une option comme éléments à l'intérieur de celui-ci peuvent être cachés à l'exécution et donc je ne sais pas le nombre total de colonnes au moment de la conception. La meilleure solution et la plus simple que je pourrais trouver est:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="1" Orientation="Horizontal">
        <!-- Right aligned controls go here -->
    </StackPanel>
</Grid>

Cela se traduira par des contrôles à l'intérieur du StackPanel étant aligné 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 première depuis que vous commencez à droite. Si FlowDirection devient un problème il suffit d'ajouter un StackPanel autour d'elle et spécifiez FlowDirection = « LeftToRight » pour cette partie. Ou simplement spécifier FlowDirection = "LeftToRight" pour le contrôle pertinent.

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" FlowDirection="RightToLeft">
    <Button Width="40" HorizontalAlignment="Right" Margin="3">Right</Button>
    <TextBlock Margin="5">Left</TextBlock>
    <StackPanel FlowDirection="LeftToRight">
        <my:DatePicker Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
    </StackPanel>
    <my:DatePicker FlowDirection="LeftToRight" Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
</StackPanel>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Left"  />
    <Button Width="30" Grid.Column="1" >Right</Button>
</Grid>

pour Windows 10 utiliser relativePanel au lieu du panneau de pile, et en utilisant

  

relativepanel.alignrightwithpanel = "true"

pour les éléments contenus.

Si vous rencontrez un problème comme celui que j'avais où les étiquettes ont été centrées dans mon panneau vertical de la pile, assurez-vous d'utiliser les commandes de pleine largeur. Supprimer la propriété Width, ou mettez votre bouton dans un conteneur pleine largeur qui permet l'alignement interne. WPF est tout au sujet des conteneurs pour contrôler la mise en page.

<StackPanel Orientation="Vertical">
    <TextBlock>Left</TextBlock>
    <DockPanel>
        <Button HorizontalAlignment="Right">Right</Button>
    </DockPanel>
</StackPanel>

verticale StackPanel avec l'étiquette gauche suivi par bouton droit

J'espère que cette aide.

Peut-être pas ce que vous voulez si vous devez éviter les valeurs de taille coder en dur, mais parfois j'utiliser un « shim » (séparateur) pour ceci:

<Separator Width="42"></Separator>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top