2009-08-20 9 views
56

Ich versuche Padding von einem StackPanel zu setzen, aber es gibt keine solche Eigenschaft. Ich habe StackPanel.Border versucht, aber es gibt auch keine solche Eigenschaft.Polsterung auf StackPanel?

Irgendwelche Ideen?

Antwort

88

Sie könnten einen Rahmen um das StackPanel legen und einen Abstand darauf setzen. Am Ende mache ich das sehr oft, da es viele UIElements gibt, die keine Padding-Eigenschaft haben.

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

(Hinweis: alle FrameworkElements haben eine Margin-Eigenschaft, die wird Raum das Element, aber nicht die Randbreite als Teil des Actual enthalten).

Wenn Sie die Elemente in einem StackPanel platzieren möchten, sollten Sie jedem Kind einen Rand hinzufügen, wie Rob sagte.

+0

Gibt es eine Möglichkeit, daraus einen Style mit 'StackPanel' als' ContentTemplate' zu ​​erstellen? – bytecode77

+0

Entschuldigung, ich weiß es nicht. Es ist Jahre her, seit ich WPF benutzt habe. Hoffentlich kommt ein freundlicher Fremder vorbei, der es weiß. –

2

Könnte es Marge sein, die Sie suchen?

+0

Margin funktionieren würde, wenn man mit Hintergründen nicht Chaos tut ... – Califf

4

Wahrscheinlich möchten Sie stattdessen den Elementen im Panel einen Rand hinzufügen. Sie erhalten das gleiche Ergebnis, müssen es nur rückwärts angehen.

+5

Sie einen Ort zu tun darin zu sagen ist es schlimmer als Rand zu Dutzend Elementen im Stackpanel hinzuzufügen? – Califf

+0

Nein. Er sagt, dass es der nächst einfachste Weg ist, denn das StackPanel hat eigentlich keine Padding-Eigenschaft. – TernaryTopiary

4

Oder man könnte etwas Ähnliches tun TiM:

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

Dies ist eine Variante der Polsterung 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

Das ist in Ordnung, aber es würde jeden Rand außer Kraft setzen (oder würde nicht), den Sie versuchen, auf Ihren Knöpfen zu setzen. Das ist vielleicht in Ordnung, aber Sie verlieren hier an Flexibilität. Wenn Sie möchten, dass ein Stil auf alle Steuerelemente in einem Ressourcenbereich angewendet wird, verwenden Sie einfach kein 'x: Key'. Das Einstellen von zwei Stilen ist hier nicht notwendig. Entferne den zweiten (mit 'BasedOn') und entferne das' x: Key' Attribut vom ersten. Wenn Sie möchten, dass sie nur auf Schaltflächen angewendet wird, verwenden Sie diese als Zieltyp. Andernfalls können Sie sie unverändert lassen. – KyleMit