78 Stimmen

Auffüllen von StackPanel?

Ich versuche, Padding eines StackPanel zu setzen, aber es gibt keine solche Eigenschaft. Ich habe versucht, StackPanel.Border, aber es gibt keine solche Eigenschaft entweder.

Irgendwelche Ideen?

132voto

Tim Swast Punkte 13064

Sie könnten einen Rahmen um das StackPanel legen und eine Auffüllung dafür festlegen. Ich am Ende tun dies eine Menge, da es viele UIElements, die nicht eine Padding-Eigenschaft haben.

<Border Padding="10">
    <StackPanel>
        <!--...-->
    </StackPanel>
</Border>

(Hinweis: Alle FrameworkElemente haben eine Eigenschaft Margin, die den Abstand des Elements angibt, aber die Randbreite nicht in die ActualWidth einbezieht).

Wenn Sie die Elemente in einem StackPanel mit Abstand anordnen möchten, müssen Sie, wie von Rob beschrieben, für jedes untergeordnete Element einen Rand hinzufügen.

0 Stimmen

Gibt es eine Möglichkeit, daraus einen Stil zu erstellen mit StackPanel como ContentTemplate ?

0 Stimmen

Tut mir leid, ich weiß es nicht. Es ist Jahre her, seit ich WPF verwendet habe. Hoffentlich kommt ein freundlicher Fremder vorbei, der es weiß.

7voto

Oliver Punkte 33151

Oder Sie könnten etwas Ähnliches wie TiM machen:

<Border>
    <StackPanel Margin="10">
        ...
    </StackPanel>
</Border>

5voto

George Birbilis Punkte 673

Wenn Sie meinen, dass Sie untergeordnete Elemente des StackPanel (das keine Padding-Eigenschaft hat) auf Abstand bringen wollen, siehe: Wie kann ich den Abstand zwischen den untergeordneten Elementen eines StackPanels vergrößern?

2voto

Rob Punkte 1345

Wahrscheinlich sollten Sie stattdessen den Elementen im Bedienfeld einen Rand hinzufügen. Sie erhalten dasselbe Ergebnis, müssen es nur anders angehen.

6 Stimmen

Sie sagen, dass es an einer Stelle zu tun ist schlimmer als das Hinzufügen von Rand zu Dutzenden von Elementen innerhalb Stackpanel?

0 Stimmen

Nein er sagt, dass es der nächst einfachere Weg ist, da das StackPanel hat eigentlich keine Padding-Eigenschaft .

2voto

Microshine Punkte 701

Dies ist eine Variante von padding für Elemente von StackPanel

<StackPanel Orientation="Horizontal" Grid.Row="2">
    <StackPanel.Resources>
         <Style x:Key="StackPanelPadding" TargetType="Control">
            <Setter Property="Margin" Value="5,0,0,0"/>
            <Setter Property="Height" Value="40"/>
         </Style>
         <Style BasedOn="{StaticResource StackPanelPadding}" TargetType="Button"/>
    </StackPanel.Resources>
    <Button/>
    <Button/>
</StackPanel>

1 Stimmen

Das ist in Ordnung, aber es würde jeden Rand, den Sie für Ihre Schaltflächen festlegen wollen, außer Kraft setzen (oder auch nicht). Das mag in Ordnung sein, aber Sie verlieren hier an Flexibilität. Wenn Sie außerdem möchten, dass ein Stil auf alle Steuerelemente innerhalb eines Ressourcenbereichs angewendet wird, dann verwenden Sie einfach keine x:Key . Es ist also unnötig, hier zwei Stile einzustellen. Entfernen Sie den zweiten (mit BasedOn ) und beseitigen Sie die x:Key Attribut für die erste. Wenn Sie wollen, dass es nur für Schaltflächen gelten, dann verwenden Sie das als Zieltyp, sonst können Sie es so lassen, wie es ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X