J'ai le code suivant:
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<RadioButton Content="_Programs"
IsChecked="{Binding Path=ProgramBanksSelected}" IsEnabled="{Binding Path=ProgramsEnabled}" Margin="8" />
<StackPanel>
<Label Content="Master" Height="28" Name="MasterFileStatus" VerticalContentAlignment="Center"/>
</StackPanel>
</StackPanel>
...
Le bouton radio doit être placé du côté gauche dans le panneau de pile (j'ai enlevé quelques boutons pour ne pas encombrer l'exemple) et l'étiquette (que je mets temporairement dans un StackPanel imbriqué) devrait se trouver du côté droit.
J'ai déjà essayé de nombreuses combinaisons d'alignements mais je ne parviens pas à placer l'étiquette du côté droit… .. Que dois-je ajouter pour accomplir cela?
N'utilisez simplement pas StackPanel
, StackPanels
pile. Pour des raisons évidentes, ils ne permettent pas l'alignement dans la direction dans laquelle ils se superposent. Utilisez une Grid
, avec des définitions de colonne comme ceci:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
Même si c'est vieux, si quelqu'un devait le rencontrer comme moi, voici une solution simple.
Créez une nouvelle grille et placez à l'intérieur de celle-ci deux panneaux de pile avec un alignement horizontal différent.
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<!--Code here-->
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<!--Code here-->
</StackPanel>
</Grid>
Le problème possible est que maintenant, sans manipulation supplémentaire, les deux pourraient se chevaucher.
Comme vous avez défini l'orientation StackPanel
sur Horizontal
, la propriété HorizontalAlignment
ne fonctionnera pas avec les éléments enfants. Vous pouvez conserver la StackPanel
si vous avez besoin de contrôles supplémentaires, bien que je vous recommande de passer à une Grid
(entre autres) pour créer la mise en page souhaitée.
De plus, la Grid
vous permettra de contrôler la largeur réelle de chaque colonne:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<RadioButton
Grid.Column="0"
...
/>
<Label
Grid.Column="1"
...
/>
</Grid>
L'utilisateur @pasx a raison. Vous devez utiliser DockPanel et ancrer RadioButton sur le côté gauche et votre StackPanel avec l'étiquette sur le côté droit.
<DockPanel>
<DockPanel
DockPanel.Dock="Top"
LastChildFill="False" >
<RadioButton
DockPanel.Dock="Left"
Content="_Programs"
IsChecked="{Binding Path=ProgramBanksSelected}"
IsEnabled="{Binding Path=ProgramsEnabled}"
Margin="8" />
<StackPanel
DockPanel.Dock="Right">
<Label
Content="Master"
Height="28"
Name="MasterFileStatus"
VerticalContentAlignment="Center"/>
</StackPanel>
</DockPanel>
...