Frage

Ich habe mich gefragt, ob ich zwei Kontrollen in einem horizontalen orientierten Stackpanel haben kann, so dass der richtige Punkt sollte auf die rechte Seite des Stackpanel angedockt werden.

Ich habe versucht, die folgenden, aber es hat nicht funktioniert:

<StackPanel Orientation="Horizontal">
    <TextBlock>Left</TextBlock>
    <Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>

Im Snippet oben Ich möchte, dass die Taste auf der rechten Seite des Stackpanel dockt werden.

. Hinweis: Ich brauche es mit Stackpanel, nicht Grid etc getan werden

War es hilfreich?

Lösung

Sie können dies erreichen, mit einem DockPanel:

<DockPanel Width="300">
    <TextBlock>Left</TextBlock>
    <Button HorizontalAlignment="Right">Right</Button>
</DockPanel>

Der Unterschied besteht darin, dass ein StackPanel wird Kind-Elemente anordnen in einzelne Linie (entweder vertikal oder horizontal), während ein Antwort .

Andere Tipps

Yo kann FlowDirection von Stack panel auf RightToLeft, und dann werden alle Elemente auf der rechten Seite ausgerichtet werden.

Für diejenigen, die auf diese Frage stolpern, ist hier, wie dieses Layout erreichen mit ein Grid:

<Grid>
    <TextBlock Text="Server:"/>
    <TextBlock Text="http://127.0.0.1" HorizontalAlignment="Right"/>
</Grid>

schafft

Server:                                                                   http://127.0.0.1

konnte nicht diese Arbeit bekommen DockPanel ganz die Art und Weise unter Verwendung Ich wollte und die Umkehrung der Strömungsrichtung eines Stackpanel mühsam ist. ein Gitter verwendet, ist keine Option, da Elemente in der es zur Laufzeit ausgeblendet werden können und so weiß ich nicht, die Gesamtzahl der Spalten zur Entwurfszeit. Die beste und einfachste Lösung, die ich tun konnte, ist:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
    <StackPanel Grid.Column="1" Orientation="Horizontal">
        <!-- Right aligned controls go here -->
    </StackPanel>
</Grid>

Das in der Kontrollgruppe innerhalb des Stackpanel führen wird unabhängig von der Anzahl der Kontrollen auf die rechte Seite des zur Verfügung stehenden Raumes ausgerichtet ist - sowohl im Design und die Laufzeit. Yay! :)

Das funktioniert perfekt für mich. Legen Sie einfach auf den Button zum ersten Mal seit Sie auf dem rechten Seite fängt. Wenn Flowdirection wird ein Problem, nur einen Stackpanel um es hinzuzufügen und Flowdirection = „LeftToRight“ für den Teil angeben. Oder einfach Flowdirection = „LeftToRight“ für die entsprechende Steuerung angeben.

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right" FlowDirection="RightToLeft">
    <Button Width="40" HorizontalAlignment="Right" Margin="3">Right</Button>
    <TextBlock Margin="5">Left</TextBlock>
    <StackPanel FlowDirection="LeftToRight">
        <my:DatePicker Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
    </StackPanel>
    <my:DatePicker FlowDirection="LeftToRight" Height="24" Name="DatePicker1" Width="113" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />    
</StackPanel>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Left"  />
    <Button Width="30" Grid.Column="1" >Right</Button>
</Grid>

für Fenster 10 verwenden relativePanel statt Stapelfeld und verwenden

  

relativepanel.alignrightwithpanel = "true"

für die darin enthaltenen Elemente.

Wenn Sie ein Problem wie die sind, die ich hatte, wo Etiketten in meinem vertikalen Stapel Platte zentriert wurden, stellen Sie sicher, dass Sie die volle Breite Steuerelemente verwenden. Löschen Sie die Width-Eigenschaft, oder setzen Sie Ihre Schaltfläche in einem vollen Breite Behälter, die interne Ausrichtung ermöglicht. WPF ist alle Container über die Verwendung des Layout zu steuern.

<StackPanel Orientation="Vertical">
    <TextBlock>Left</TextBlock>
    <DockPanel>
        <Button HorizontalAlignment="Right">Right</Button>
    </DockPanel>
</StackPanel>

Vertikal Stackpanel mit links Etikett gefolgt von Rechts-Taste

Ich hoffe, das hilft.

Vielleicht nicht, was Sie wollen, wenn Sie hart codierte Größenwerte vermeiden müssen, aber manchmal benutze ich eine „Scheibe“ (Separator) für diese:

<Separator Width="42"></Separator>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top