我尝试全局应用DataGrid样式,如下所示:
<Style TargetType="DataGrid">
<Setter Property="ColumnWidth" Value="*"/>
<Setter Property="RowHeaderWidth" Value="0"/>
</Style>
RowHeaderWidth
的样式有效,但ColumnWidth
的样式不起作用(DataGrid末尾有空列)。当我在DataGrid中显式设置ColumnWidth="*"
时,它工作(空列已经消失)。
我想知道我们是否能够在风格中全局设置ColumnWidth="*"
?提前谢谢!
答案 0 :(得分:1)
DataGrid.ColumnWidth不能像其他属性一样应用样式。我们必须明确指定值
答案 1 :(得分:0)
在我正在进行的项目中,我们制作了许多ResourceDictionary
中的控件。我们使用与您相同的方法。那么,Style
标记是ResourceDictionary
吗?
答案 2 :(得分:0)
ColumnWidth设置器适用于自动生成的列,但不适用于手动定义的列。在我看来,这似乎是对WPF的疏忽。您还无法按照this answer的说明设置样式栏的宽度。
它建议使用附加属性,并提供一个示例,我以此为灵感来解决我的问题。我定义此附加属性:
public static class DataGridHelper
{
public static DataGridLength GetColumnWidth(DataGrid obj) => (DataGridLength)obj.GetValue(ColumnWidthProperty);
public static void SetColumnWidth(DataGrid obj, DataGridLength value) => obj.SetValue(ColumnWidthProperty, value);
/// <summary>
/// The ColumnWidth attached property sets the Width of all columns.
/// </summary>
public static readonly DependencyProperty ColumnWidthProperty =
DependencyProperty.RegisterAttached("ColumnWidth", typeof(DataGridLength), typeof(DataGridHelper), new PropertyMetadata(ColumnWidthChanged));
private static void ColumnWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var dataGrid = d as DataGrid;
var columns = dataGrid.Columns;
var width = GetColumnWidth(dataGrid);
dataGrid.Columns.CollectionChanged += (s1, e1) => UpdateColumnWidths(columns, width);
UpdateColumnWidths(columns, width);
}
private static void UpdateColumnWidths(ICollection<DataGridColumn> columns, DataGridLength width)
{
foreach (var column in columns) column.Width = width;
}
}
然后使用一种样式将其添加到我的DataGrids中:
<Style TargetType="DataGrid">
<Setter Property="local:DataGridHelper.ColumnWidth" Value="*"/>
</Style>