这是一种方式: 1)创建一个带有附加属性的集合,如下所示:
public class ColumnDefinitions : Collection { public static readonly DependencyProperty SourceProperty = DependencyProperty.RegisterAttached( “Source”, typeof(ColumnDefinitions), typeof(ColumnDefinitions), new PropertyMetadata( default(ColumnDefinitions), OnColumnDefinitionsChanged)); public static void SetSource(Grid element, ColumnDefinitions value) { element.SetValue(SourceProperty, value); } [AttachedPropertyBrowsableForChildren(IncludeDescendants = false)] [AttachedPropertyBrowsableForType(typeof(Grid))] public static ColumnDefinitions GetSource(Grid element) { return (ColumnDefinitions)element.GetValue(SourceProperty); } private static void OnColumnDefinitionsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var grid = (Grid)d; grid.ColumnDefinitions.Clear(); var columnDefinitions = (ColumnDefinitions)e.NewValue; if (columnDefinitions == null) { return; } foreach (var columnDefinition in columnDefinitions) { grid.ColumnDefinitions.Add(columnDefinition); } } } 2)然后你可以使用它作为资源和网格样式,如下所示: 请注意,必须使用x:Shared=“False”。如果没有相同的定义将添加到导致WPF抛出的许多网格中。
可以通过使用具有网格作为其ItemsPanelTemplate的ItemsControl来设置ColumnDefinitions。下面的示例显示了这一点。