首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在StackPanel中设置项目间距的简单方法是什么?

在StackPanel中设置项目间距的简单方法是什么?
EN

Stack Overflow用户
提问于 2011-03-15 07:54:35
回答 5查看 23.3K关注 0票数 21

有没有一种简单的方法可以在StackPanel中设置项目之间的默认间距,这样我就不必在每个项目上都设置边距属性?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-15 09:33:08

如果所有的控件都是相同的,那么就按照IanR的建议去做,并实现一个捕获该控件的样式。如果不是,那么您就不能为基类创建默认样式,因为它就是不起作用。

对于这样的情况,最好的方法是使用非常巧妙的附加属性(在WPF4中也称为行为)。

您可以创建具有附加属性的类,如下所示:

代码语言:javascript
复制
public class MarginSetter
{
    public static Thickness GetMargin(DependencyObject obj)
    {
        return (Thickness)obj.GetValue(MarginProperty);
    }

    public static void SetMargin(DependencyObject obj, Thickness value)
    {
        obj.SetValue(MarginProperty, value);
    }

    // Using a DependencyProperty as the backing store for Margin.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MarginProperty =
        DependencyProperty.RegisterAttached("Margin", typeof(Thickness), typeof(MarginSetter), new UIPropertyMetadata(new Thickness(), CreateThicknesForChildren));

    public static void CreateThicknesForChildren(object sender, DependencyPropertyChangedEventArgs e)
    {
        var panel = sender as Panel;

        if (panel == null) return;

        foreach (var child in panel.Children)
        {
            var fe = child as FrameworkElement;

            if (fe == null) continue;

            fe.Margin = MarginSetter.GetMargin(panel);
        }
    }


}

现在,要使用它,您需要做的就是将此附加属性附加到所需的任何面板,如下所示:

代码语言:javascript
复制
<StackPanel local:MarginSetter.Margin="10">
    <Button Content="hello " />
    <Button Content="hello " />
    <Button Content="hello " />
    <Button Content="hello " />
</StackPanel>

当然是完全可重用的。

票数 14
EN

Stack Overflow用户

发布于 2011-03-16 09:03:23

我使用透明分隔符,它工作得很好:

代码语言:javascript
复制
<Separator Opacity="0" Height="20"/>

当然,您可以使用页边距,但是如果您想要更改页边距,则必须更新所有元素。

分隔符甚至可以在静态资源中设置样式。

附加的属性也可以做到这一点,但我认为这有点过分了。

票数 50
EN

Stack Overflow用户

发布于 2021-11-25 09:54:32

代码语言:javascript
复制
<Rectangle Width="3"/>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5306029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档