-
WPF Grid 中子控件之间的间距
2026-02-01 21:29:25 生存指南
这里可以看到另一种不错的方法 (链接)
你可以创建一个用于设置 Margin 属性的类:
public class MarginSetter
{
public static Thickness GetMargin(DependencyObject obj) => (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(nameof(FrameworkElement.Margin), typeof(Thickness),
typeof(MarginSetter), new UIPropertyMetadata(new Thickness(), MarginChangedCallback));
public static void MarginChangedCallback(object sender, DependencyPropertyChangedEventArgs e)
{
// Make sure this is put on a panel
var panel = sender as Panel;
if (panel == null) return;
panel.Loaded += Panel_Loaded;
}
private static void Panel_Loaded(object sender, EventArgs e)
{
var panel = sender as Panel;
// Go over the children and set margin for them:
foreach (FrameworkElement fe in panel.Children.OfType
()) fe.Margin = GetMargin(panel);
}
}
现在你已经附加了属性行为,因此像这样的语法将起作用:
这是将 Margin 设置为面板的多个子元素的最简单且最快的方法,即使它们不是相同类型的元素(例如Button,TextBox,ComboBox等)。