2009-08-20 15 views
56

Estoy tratando de establecer el relleno de un StackPanel pero no hay tal propiedad. Intenté StackPanel.Border, pero tampoco existe dicha propiedad.Relleno en StackPanel?

¿Alguna idea?

Respuesta

88

Puede poner un borde alrededor del StackPanel y establecer un relleno en eso. Termino haciendo esto mucho, ya que hay muchos UIElements que no tienen una propiedad de relleno.

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

(Nota: todos los FrameworkElements tiene una propiedad de margen, que no será el espacio del elemento, sino que incluyen la anchura del margen como parte de la ActualWidth).

Si desea espaciar los elementos dentro de un StackPanel, querrá agregar un margen a cada niño como dijo Rob.

+0

¿Hay alguna manera de crear un estilo a partir de esto con 'StackPanel' como' ContentTemplate'? – bytecode77

+0

Lo siento, no sé. Han pasado años desde que utilicé WPF. Con suerte, viene algún extraño amable que sabe. –

2

¿No puede ser Margin lo que estás buscando?

+0

Margen funcionaría si uno no se mete con los fondos ... – Califf

4

Probablemente desee agregar un margen a los elementos en el panel. Obtendrás el mismo resultado, solo tienes que acercarte hacia atrás.

+5

que decir que hacer en un solo lugar es peor que agregar margen a docena de elementos dentro de stackpanel? – Califf

+0

No ... él dice que es la siguiente manera más fácil, dado que el StackPanel _no tiene una propiedad de relleno_. – TernaryTopiary

4

O usted podría hacer algo similar a TiM:

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

Esta es una variante de relleno para elementos de 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

Esto está bien, pero anularía (o no) cualquier margen que intente establecer en sus botones. Eso podría estar bien, pero estás perdiendo flexibilidad aquí. Además, si desea que un estilo se aplique a todos los controles dentro del alcance de un recurso, simplemente no use '' x: Key'. Así que establecer dos estilos aquí es innecesario. Elimine el segundo (con 'BasedOn') y elimine el atributo' x: Key' en el primero. Si desea que solo se aplique a los botones, utilícelo como tipo de destino; de lo contrario, puede dejarlo como está. – KyleMit