content wpf xaml layout alignment stackpanel

wpf - stackpanel content alignment



AlineaciĆ³n de controles en ambos lados izquierdo y derecho en un panel de pila en WPF (4)

Tengo el siguiente código:

<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> ...

El botón de radio debe colocarse en el lado izquierdo en el panel de pila (eliminé algunos botones para no saturar el ejemplo) y la etiqueta (que puse temporalmente en un StackPanel anidado) debe estar en el lado derecho.

Ya probé muchas combinaciones de alineaciones, pero no puedo obtener la etiqueta en el lado derecho. ¿Qué debería agregar para lograr esto?


Aunque esto es viejo, si alguien se encuentra con esto como lo hice, aquí hay una solución simple.

Haz una nueva grilla y dentro de esa grilla coloca dos paneles de pila con diferentes alineaciones horizontales.

<Grid> <StackPanel Orientation="Horizontal" HorizontalAlignment="Left"> <!--Code here--> </StackPanel> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> <!--Code here--> </StackPanel> </Grid>

El posible problema es que ahora sin un manejo adicional, los dos podrían superponerse entre sí.


Como ha establecido la orientación de StackPanel en Horizontal , la propiedad StackPanel HorizontalAlignment no funcionará en los elementos secundarios. Puede mantener el StackPanel si necesita controles adicionales, aunque recomendaría cambiar a una Grid (entre otras cosas) para construir el diseño que desee.

Además, la Grid le permitirá controlar el ancho real de cada columna:

<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="50" /> <ColumnDefinition Width="150" /> </Grid.ColumnDefinitions> <RadioButton Grid.Column="0" ... /> <Label Grid.Column="1" ... /> </Grid>


El usuario @pasx tiene razón. Debe usar DockPanel y acoplar RadioButton en el lado izquierdo, y su StackPanel con la etiqueta en el lado derecho.

<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> ...


Simplemente no use una pila StackPanel , StackPanels . Lo hacen, por razones obvias, no permiten la alineación en la dirección en la que se amontonan. Use una Grid , con definiciones de columnas como esta:

<Grid.ColumnDefinitions> <ColumnDefinition Width="Auto" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="Auto" /> </Grid.ColumnDefinitions>