有没有一种简单的方法可以在StackPanel中设置项目之间的默认间距,这样我就不必在每个项目上都设置边距属性?
发布于 2011-03-15 09:33:08
如果所有的控件都是相同的,那么就按照IanR的建议去做,并实现一个捕获该控件的样式。如果不是,那么您就不能为基类创建默认样式,因为它就是不起作用。
对于这样的情况,最好的方法是使用非常巧妙的附加属性(在WPF4中也称为行为)。
您可以创建具有附加属性的类,如下所示:
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);
}
}
}
现在,要使用它,您需要做的就是将此附加属性附加到所需的任何面板,如下所示:
<StackPanel local:MarginSetter.Margin="10">
<Button Content="hello " />
<Button Content="hello " />
<Button Content="hello " />
<Button Content="hello " />
</StackPanel>
当然是完全可重用的。
发布于 2011-03-16 09:03:23
我使用透明分隔符,它工作得很好:
<Separator Opacity="0" Height="20"/>
当然,您可以使用页边距,但是如果您想要更改页边距,则必须更新所有元素。
分隔符甚至可以在静态资源中设置样式。
附加的属性也可以做到这一点,但我认为这有点过分了。
发布于 2021-11-25 09:54:32
<Rectangle Width="3"/>
https://stackoverflow.com/questions/5306029
复制相似问题