Eu queria saber se posso ter 2 controles em um StackPanel orientado para horizontal, para que o item certo seja encaixado no lado direito do StackPanel.
Eu tentei o seguinte, mas não funcionou:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
No trecho de código acima, quero que o botão seja encaixado no lado direito do StackPanel.
Nota: Eu preciso que isso seja feito com o StackPanel, não com o Grid etc.
wpf
layout
wpf-controls
stackpanel
alignment
Shimmy Weitzhandler
fonte
fonte
Respostas:
Você pode conseguir isso com um
DockPanel
:A diferença é que a
StackPanel
organizará elementos filho em uma única linha (vertical ou horizontal) enquanto aDockPanel
define uma área na qual você pode organizar elementos filho horizontal ou verticalmente, um em relação ao outro (aDock
propriedade altera a posição de um elemento em relação a outro elementos do mesmo contêiner.As propriedades de alinhamento, como, por exemploHorizontalAlignment
, alteram a posição de um elemento em relação ao elemento pai).Atualizar
Como apontado nos comentários, você também pode usar a
FlowDirection
propriedade de aStackPanel
. Veja a resposta de @ D_Bester .fonte
LastChildFill="False"
que é<DockPanel LastChildFill="False">
, veja stackoverflow.com/a/9599290/4573839Yo pode definir
FlowDirection
deStack panel
queRightToLeft
, em seguida, todos os itens serão alinhados para o lado direito.fonte
Para aqueles que tropeçar em cima desta questão, aqui é a forma de alcançar esse layout com um
Grid
:cria
fonte
Não foi possível obter esse trabalho usando um DockPanel da maneira que eu queria e inverter a direção do fluxo de um StackPanel é problemático. Usar uma grade não é uma opção, pois os itens nela podem estar ocultos em tempo de execução e, portanto, não sei o número total de colunas em tempo de design. A melhor e mais simples solução que eu poderia encontrar é:
Isso fará com que os controles dentro do StackPanel sejam alinhados ao lado direito do espaço disponível, independentemente do número de controles - tanto no design quanto no tempo de execução. Yay! :)
fonte
Isso funciona perfeitamente para mim. Basta colocar o botão primeiro, pois você está começando à direita. Se o FlowDirection se tornar um problema, adicione um StackPanel ao seu redor e especifique FlowDirection = "LeftToRight" para essa parte. Ou simplesmente especifique FlowDirection = "LeftToRight" para o controle relevante.
fonte
fonte
para Windows 10, use o relatedPanel em vez do painel de pilha e use
para os elementos contidos.
fonte
Se você estiver tendo um problema como o que eu tinha, onde as etiquetas estavam centralizadas no meu painel de pilha vertical, certifique-se de usar controles de largura total. Exclua a propriedade Width ou coloque seu botão em um contêiner de largura total que permita o alinhamento interno. O WPF é sobre o uso de contêineres para controlar o layout.
StackPanel vertical com etiqueta esquerda seguida de botão direito
Eu espero que isso ajude.
fonte
Talvez não seja o que você deseja se precisar evitar valores de tamanho codificados, mas às vezes eu uso um "calço" (Separador) para isso:
fonte