Ich habe mich gefragt, ob ich zwei Steuerelemente in einem horizontal ausgerichteten StackPanel haben kann, damit das richtige Element an die rechte Seite des StackPanels angedockt wird.
Ich habe Folgendes versucht, aber es hat nicht funktioniert:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
Im obigen Snippet soll der Button an der rechten Seite des StackPanels angedockt sein.
Hinweis: Ich muss es mit StackPanel machen, nicht mit Grid usw.
wpf
layout
wpf-controls
stackpanel
alignment
Shimmy Weitzhandler
quelle
quelle
Antworten:
Sie können dies erreichen mit
DockPanel
:Der Unterschied besteht darin, dass a
StackPanel
untergeordnete Elemente in einer einzigen Linie (entweder vertikal oder horizontal) anordnet, während aDockPanel
einen Bereich definiert, in dem Sie untergeordnete Elemente entweder horizontal oder vertikal relativ zueinander anordnen können (dieDock
Eigenschaft ändert die Position eines Elements relativ zu anderen Elemente innerhalb desselben Containers. Ausrichtungseigenschaften (z. B.HorizontalAlignment
Ändern der Position eines Elements relativ zu seinem übergeordneten Element).Aktualisieren
Wie in den Kommentaren erwähnt, können Sie auch die
FlowDirection
Eigenschaft von a verwendenStackPanel
. Siehe die Antwort von @ D_Bester .quelle
LastChildFill="False"
ist<DockPanel LastChildFill="False">
, stellen Sie dies einYo kann so eingestellt
FlowDirection
vonStack panel
zuRightToLeft
, und dann werden alle Elemente auf der rechten Seite ausgerichtet werden.quelle
Für diejenigen, die über diese Frage stolpern, ist hier, wie man dieses Layout mit einem erreicht
Grid
:schafft
quelle
Mit einem DockPanel konnte dies nicht so funktionieren, wie ich es wollte, und das Umkehren der Flussrichtung eines StackPanels ist problematisch. Die Verwendung eines Rasters ist keine Option, da Elemente in diesem Raster zur Laufzeit möglicherweise ausgeblendet sind und ich daher die Gesamtzahl der Spalten zur Entwurfszeit nicht kenne. Die beste und einfachste Lösung, die ich finden könnte, ist:
Dies führt dazu, dass Steuerelemente im StackPanel unabhängig von der Anzahl der Steuerelemente - sowohl zum Entwurf als auch zur Laufzeit - auf der rechten Seite des verfügbaren Speicherplatzes ausgerichtet werden. Yay! :) :)
quelle
Das funktioniert perfekt für mich. Legen Sie einfach den Knopf an die erste Stelle, da Sie rechts beginnen. Wenn FlowDirection zu einem Problem wird, fügen Sie einfach ein StackPanel hinzu und geben Sie FlowDirection = "LeftToRight" für diesen Teil an. Oder geben Sie einfach FlowDirection = "LeftToRight" für das entsprechende Steuerelement an.
quelle
quelle
Verwenden Sie für Windows 10 relativePanel anstelle von Stack Panel und verwenden Sie
für die enthaltenen Elemente.
quelle
Wenn Sie ein Problem wie das haben, bei dem Beschriftungen in meinem vertikalen Stapelfenster zentriert waren, stellen Sie sicher, dass Sie Steuerelemente in voller Breite verwenden. Löschen Sie die Width-Eigenschaft oder legen Sie Ihre Schaltfläche in einem Container voller Breite ab, der eine interne Ausrichtung ermöglicht. Bei WPF geht es darum, Container zur Steuerung des Layouts zu verwenden.
Vertikales StackPanel mit linker Beschriftung, gefolgt von rechter Schaltfläche
Ich hoffe das hilft.
quelle
Vielleicht nicht das, was Sie wollen, wenn Sie hartcodierte Größenwerte vermeiden müssen, aber manchmal verwende ich dafür einen "Shim" (Separator):
quelle