2009-08-20 12 views
56

J'essaye de placer le remplissage d'un StackPanel mais il n'y a pas une telle propriété. J'ai essayé StackPanel.Border, mais il n'y a pas une telle propriété non plus.Rembourrage sur StackPanel?

Des idées?

Répondre

88

Vous pouvez placer une bordure autour du StackPanel et définir un remplissage. Je finis par le faire beaucoup, car il y a beaucoup de UIElements qui n'ont pas de propriété de remplissage.

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

(Note: tous les FrameworkElements ont une propriété de marge, ce qui place l'élément, mais ne comprend pas la largeur de la marge dans le cadre du ActualWidth).

Si vous voulez espacer les éléments à l'intérieur d'un StackPanel, vous devez ajouter une marge à chaque enfant comme Rob l'a dit.

+0

Existe-t-il un moyen de créer un style avec 'StackPanel' en tant que' ContentTemplate'? – bytecode77

+0

Désolé, je ne sais pas. Cela fait des années que j'ai utilisé WPF. Espérons qu'un gentil inconnu arrive, qui sait. –

2

Se pourrait-il que ce soit Margin que vous recherchez?

+0

Marge fonctionnerait si l'on ne plaisante pas avec ... – Califf

4

Vous souhaiterez probablement ajouter une marge aux éléments du panneau. Vous obtiendrez le même résultat, il suffit de l'approcher en arrière.

+5

arrière-plans vous dire faire en elle un seul endroit est pire que d'ajouter une marge à la douzaine d'éléments à l'intérieur de la pile? – Califf

+0

Non ... il dit que c'est la prochaine façon la plus facile, vu que le StackPanel n'a pas vraiment de propriété Padding. – TernaryTopiary

4

Ou vous pourriez faire quelque chose de similaire à TiM:

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

est une variante de rembourrage pour les éléments 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

C'est correct, mais cela annulera (ou non) toute marge que vous essayez de définir sur vos boutons. C'est peut-être bien, mais vous perdez de la flexibilité ici. De plus, si vous voulez appliquer un style à tous les contrôles d'une portée de ressources, n'utilisez pas de 'x: Key'. Donc, mettre deux styles ici est inutile. Enlevez le second (avec 'BasedOn') et débarrassez-vous de l'attribut' x: Key' sur le premier. Si vous voulez qu'il s'applique uniquement aux boutons, utilisez-le comme type de cible, sinon vous pouvez le laisser tel quel. – KyleMit