在StackPanel上填充?


Answers:


118

您可以在StackPanel周围放置边框,并在其上设置填充。我最终做了很多事情,因为有很多UIElement没有padding属性。

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

(注意:所有FrameworkElement都具有Margin属性,该属性将间隔元素,但不包括marginWidth作为ActualWidth的一部分)。

如果您想在StackPanel内部放置项目,则需要为每个孩子添加一个边距,如Rob所说。


有没有办法用StackPanelas创建样式ContentTemplate
bytecode77

对不起,我不知道。自从我使用WPF已经好几年了。希望有一个了解的陌生人。
Tim Swast

7

或者您可以执行类似于TiM的操作:

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


3

您可能需要向面板中的项目添加边距。您将得到相同的结果,只需要向后处理即可。


5
您说在一个地方做比在堆栈面板中的十几个元素上增加边距差吗?
卡里夫

不。他是说这是下一个最简单的方法,因为StackPanel实际上没有Padding属性
TernaryTopiary

3

这是StackPanel元素的padding的变体

<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
可以,但是它将覆盖(或不会)您尝试在按钮上设置的任何边距。可能还可以,但是您在这里失去了灵活性。另外,如果您希望将样式应用于资源范围内的所有控件,则不要使用x:Key。因此,此处不必设置两种样式。删除第二个(带有BasedOn),并删除第一个的x:Key属性。如果只希望将其应用于按钮,则将其用作目标类型,否则可以将其保留原样。
KyleMit 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.