Zastanawiałem się, czy mogę mieć 2 kontrolki w poziomym panelu StackPanel, tak aby właściwy element był zadokowany po prawej stronie StackPanel.
Próbowałem następujących rzeczy, ale nie zadziałało:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
W powyższym fragmencie chcę, aby przycisk był zadokowany po prawej stronie StackPanel.
Uwaga: muszę to zrobić za pomocą StackPanel, a nie Grid itp.
wpf
layout
wpf-controls
stackpanel
alignment
Shimmy Weitzhandler
źródło
źródło
Odpowiedzi:
Możesz to osiągnąć dzięki
DockPanel
:Różnica polega na tym, że a
StackPanel
spowoduje ułożenie elementów podrzędnych w jednej linii (w pionie lub w poziomie), podczas gdy aDockPanel
definiuje obszar, w którym można układać elementy potomne w poziomie lub w pionie względem siebie (Dock
właściwość zmienia położenie elementu względem siebie elementy w tym samym kontenerze. Właściwości wyrównania, takie jakHorizontalAlignment
zmiana pozycji elementu względem jego elementu nadrzędnego).Aktualizacja
Jak wskazano w komentarzach, możesz również użyć
FlowDirection
właściwości aStackPanel
. Zobacz @ D_Bester za odpowiedź .źródło
LastChildFill="False"
to<DockPanel LastChildFill="False">
, patrz stackoverflow.com/a/9599290/4573839Yo można ustawić
FlowDirection
odStack panel
doRightToLeft
, a następnie wszystkie elementy zostaną wyrównane do prawej strony.źródło
Dla tych, którzy natkną się na to pytanie, oto jak osiągnąć ten układ za pomocą
Grid
:tworzy
źródło
Nie mogłem tego uruchomić przy użyciu DockPanel w taki sposób, w jaki chciałem, a odwrócenie kierunku przepływu StackPanel jest kłopotliwe. Korzystanie z siatki nie jest opcją, ponieważ elementy w niej zawarte mogą być ukryte w czasie wykonywania, a zatem nie znam całkowitej liczby kolumn w czasie projektowania. Najlepsze i najprostsze rozwiązanie jakie mogłem wymyślić to:
Spowoduje to wyrównanie formantów wewnątrz StackPanel do prawej strony dostępnego miejsca, niezależnie od liczby kontrolek - zarówno podczas projektowania, jak i wykonywania. Yay! :)
źródło
U mnie to działa idealnie. Po prostu umieść przycisk jako pierwszy, ponieważ zaczynasz po prawej stronie. Jeśli FlowDirection stanie się problemem, po prostu dodaj wokół niego StackPanel i określ FlowDirection = "LeftToRight" dla tej części. Lub po prostu określ FlowDirection = "LeftToRight" dla odpowiedniej kontrolki.
źródło
źródło
w systemie Windows 10 użyj panelu RelativePanel zamiast panelu stosu i użyj
dla zawartych elementów.
źródło
Jeśli masz problem taki jak ten, który miałem, w którym etykiety były wyśrodkowane w moim panelu stosu pionowego, upewnij się, że używasz elementów sterujących pełną szerokością. Usuń właściwość Width lub umieść przycisk w kontenerze o pełnej szerokości, który umożliwia wewnętrzne wyrównanie. WPF polega na używaniu kontenerów do kontrolowania układu.
Vertical StackPanel z lewą etykietą, po której następuje prawy przycisk
Mam nadzieję, że to pomoże.
źródło
Może nie to, czego chcesz, jeśli chcesz uniknąć zakodowanych na stałe wartości rozmiaru, ale czasami używam do tego „podkładki” (separatora):
źródło