2009-08-20 8 views
56

Sto provando a impostare il padding di uno StackPanel ma non c'è una tale proprietà. Ho provato StackPanel.Border, ma non esiste neanche una tale proprietà.Riempimento su StackPanel?

Qualche idea?

risposta

88

È possibile inserire un bordo attorno allo StackPanel e impostare un riempimento su quello. Finisco per fare questo molto, dal momento che ci sono molti UIElements che non hanno una proprietà padding.

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

(Nota: tutte FrameworkElements ha una proprietà margine, che non spazio dell'elemento, ma includono la larghezza del margine nell'ambito del ActualWidth).

Se si desidera spaziare gli elementi all'interno di uno StackPanel, è necessario aggiungere un margine a ciascun bambino come ha detto Rob.

+0

C'è un modo per creare uno stile da questo con 'StackPanel' come' ContentTemplate'? – bytecode77

+0

Scusa, non lo so. Sono anni che non uso WPF. Speriamo che arrivi uno sconosciuto che lo sappia. –

2

Potrebbe essere il margine che stai cercando?

+0

Margine funzionerebbe se uno non si scherza con sfondi ... – Califf

4

Probabilmente vorrete aggiungere margine agli elementi nel pannello. Otterrai lo stesso risultato, devi solo avvicinarti all'indietro.

+5

stai dicendo facendo in esso un unico luogo è peggio di aggiungere un margine a una dozzina di elementi all'interno dello stackpanel? – Califf

+0

No ... sta dicendo che è il prossimo modo più semplice, visto che lo StackPanel non ha effettivamente una proprietà Padding_. – TernaryTopiary

4

Oppure si potrebbe fare qualcosa di simile a Tim:

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

Questa è una variante di imbottitura per elementi di 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

Questo va bene, ma sostituirà (o non vorrebbe) alcun margine che si tenta di impostare sui pulsanti. Potrebbe andar bene, ma qui stai perdendo flessibilità. Inoltre, se si desidera applicare uno stile a tutti i controlli nell'ambito di una risorsa, non utilizzare semplicemente 'x: Key'. Quindi l'impostazione di due stili qui non è necessaria. Rimuovi il secondo (con 'BasedOn') e sbarazzati dell'attributo' x: Key' sul primo. Se vuoi che si applichi solo ai pulsanti, quindi usa quello come tipo di destinazione, altrimenti puoi lasciarlo così com'è. – KyleMit