Padding on StackPanel?
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.
Shimmy Weitzhandler
Updated on February 01, 2020Comments
-
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 about 11 yearsyou saying doing in it one place is worse than adding margin to dozen elements inside stackpanel?
-
KyleMit over 10 yearsThis 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 (withBasedOn
) and get rid of thex: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 over 7 yearsNo.. he's saying that it's the next easiest way, seeing as the StackPanel doesn't actually have a Padding property.
-
bytecode77 over 7 yearsIs there a way to create a style from this with
StackPanel
asContentTemplate
? -
scubadivingfool over 7 yearsSorry, I don't know. It's been years since I've used WPF. Hopefully some kind stranger comes along who knows.