Me preguntaba si puedo tener 2 controles en un StackPanel orientado horizontalmente para que el elemento correcto deba acoplarse al lado derecho del StackPanel.
Intenté lo siguiente pero no funcionó:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
En el fragmento de arriba, quiero que el botón esté acoplado al lado derecho del StackPanel.
Nota: Necesito que se haga con StackPanel, no con Grid, etc.
wpf
layout
wpf-controls
stackpanel
alignment
Shimmy Weitzhandler
fuente
fuente
Respuestas:
Puedes lograr esto con
DockPanel
:La diferencia es que a
StackPanel
organizará los elementos secundarios en una sola línea (ya sea vertical u horizontalmente) mientras que aDockPanel
define un área donde puede organizar los elementos secundarios, ya sea horizontal o verticalmente, entre sí (laDock
propiedad cambia la posición de un elemento en relación con otro elementos dentro del mismo contenedor Las propiedades de alineación, comoHorizontalAlignment
, cambian la posición de un elemento con respecto a su elemento padre).Actualizar
Como se señaló en los comentarios, también puede usar la
FlowDirection
propiedad de aStackPanel
. Ver la respuesta de @ D_Bester .fuente
LastChildFill="False"
que es<DockPanel LastChildFill="False">
, ver stackoverflow.com/a/9599290/4573839Puede configurar
FlowDirection
deStack panel
aRightToLeft
, y luego todos los elementos se alinearán al lado derecho.fuente
Para los que se tropiezan con esta pregunta, aquí está la forma de lograr este diseño con un
Grid
:crea
fuente
No pude hacer que esto funcionara con un DockPanel de la manera que quería e invertir la dirección del flujo de un StackPanel es problemático. El uso de una cuadrícula no es una opción, ya que los elementos dentro de ella pueden estar ocultos en tiempo de ejecución y, por lo tanto, no sé el número total de columnas en tiempo de diseño. La mejor y más simple solución que se me ocurre es:
Esto dará como resultado que los controles dentro del StackPanel se alineen al lado derecho del espacio disponible, independientemente de la cantidad de controles, tanto en el diseño como en el tiempo de ejecución. ¡Hurra! :)
fuente
Esto funciona perfectamente para mi. Simplemente ponga el botón primero ya que está comenzando a la derecha. Si FlowDirection se convierte en un problema, simplemente agregue un StackPanel a su alrededor y especifique FlowDirection = "LeftToRight" para esa parte. O simplemente especifique FlowDirection = "LeftToRight" para el control relevante.
fuente
fuente
para Windows 10 use relativePanel en lugar de stack panel, y use
para los elementos contenidos.
fuente
Si tiene un problema como el que tenía donde las etiquetas estaban centradas en mi panel de pila vertical, asegúrese de usar controles de ancho completo. Elimine la propiedad Ancho o coloque el botón en un contenedor de ancho completo que permita la alineación interna. WPF se trata de usar contenedores para controlar el diseño.
StackPanel vertical con etiqueta izquierda seguida de botón derecho
Espero que esto ayude.
fuente
Tal vez no sea lo que desea si necesita evitar valores de tamaño de codificación rígida, pero a veces uso un "separador" para esto:
fuente