Padding on StackPanel?

51,991

Solution 1

You could put a Border around the StackPanel and set a padding on that. I end up doing this a lot, since there are many UIElements that do not have a padding property.

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

(Note: all FrameworkElements have a Margin property, which will space the element, but not include the margin width as part of the ActualWidth).

If you want to space the items inside a StackPanel, you'll want to add a margin to each child as Rob said.

Solution 2

Or you could do something similar to TiM:

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

Solution 3

if you mean you want to space out child elements of the StackPanel (which doesn't have a Padding property), see: How do I space out the child elements of a StackPanel?

Solution 4

This is a variant of padding for elements of 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>

Solution 5

You'll probably want to add margin to the items in the panel instead. You'll get the same result, just have to approach it backward.

Share:
51,991
Shimmy Weitzhandler
Author by

Shimmy Weitzhandler

Updated on February 01, 2020

Comments

  • Shimmy Weitzhandler
    Shimmy Weitzhandler over 4 years

    I am trying to set padding of a StackPanel but there ain't such property. I tried StackPanel.Border, but there is no such property either.

    Any ideas?

  • Califf
    Califf about 11 years
    you saying doing in it one place is worse than adding margin to dozen elements inside stackpanel?
  • KyleMit
    KyleMit over 10 years
    This is okay, but it would override (or wouldn't) any margin you try to set on your buttons. That might be okay, but you're losing flexibility here. Also, if you want a style to apply to all controls within a resource scope, then just don't use an x:Key. So setting two styles here is unnecessary. Remove the second one (with BasedOn) and get rid of the x:Key attribute on the first. If you want it to only apply to buttons, then use that as the target type, otherwise you can leave it as is.
  • TernaryTopiary
    TernaryTopiary over 7 years
    No.. he's saying that it's the next easiest way, seeing as the StackPanel doesn't actually have a Padding property.
  • bytecode77
    bytecode77 over 7 years
    Is there a way to create a style from this with StackPanel as ContentTemplate?
  • scubadivingfool
    scubadivingfool over 7 years
    Sorry, I don't know. It's been years since I've used WPF. Hopefully some kind stranger comes along who knows.