web-dev-qa-db-fra.com

Rembourrage sur StackPanel?

J'essaie de définir 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 non plus une telle propriété.

Des idées?

67
Shimmy

Vous pouvez mettre une bordure autour du StackPanel et définir un remplissage à ce sujet. Je finis souvent par faire cela, car il existe de nombreux UIElements qui n'ont pas de propriété de remplissage.

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

(Remarque: tous les FrameworkElements ont une propriété Margin, qui espacera l'élément, mais n'inclura pas la largeur de la marge dans le cadre de ActualWidth).

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

107
Tim Swast

Ou vous pourriez faire quelque chose de similaire à TiM:

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

si vous voulez espacer les éléments enfants du StackPanel (qui n'a pas de propriété Padding), voir: Comment puis-je espacer les éléments enfants d'un StackPanel?

6
George Birbilis

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

3
Rob

Serait-ce la marge que vous recherchez?

2
benPearce

Il s'agit d'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>
2
Microshine