我有一个DataGrid,我绑定到DataTable,它被SQL查询填充。我希望自动生成此网格的列,其宽度可达一定数量的像素,但如果用户希望它更宽,则仍可由用户扩展。目前,datagrid上的ColumnWidth属性设置为SizeToHeader(它似乎无论如何都不起作用,因为它仍在调整单元格内容。)
有没有办法设置最大生成宽度?
设置MaxColumnWidth可防止用户调整大于该宽度的列的大小。
我也试过挂钩到AutoGeneratedColumns,但由于没有加载行,所以ActualWidth属性只代表我设置的MinWidth。一旦datagrid完成加载其初始行集,是否会触发事件?
答案 0 :(得分:1)
迭代列集合并获取每列的宽度。如果宽度大于阈值,则将其设置为最大宽度。您可能希望在控件初始化后执行此操作。
这篇文章可能会有帮助:http://support.microsoft.com/kb/812422
这样的事情可能有用:
foreach(var c in grid.Columns)
{
var width = c.Width;
if(width > threshold)
{
c.Width = threshold;
}
}
答案 1 :(得分:0)
从文档中,在单个DataGridColumn上设置的Width属性优先于ColumnWidth属性。您可以迭代AutoGeneratedColumns事件中的DataGridColumns并设置单独的宽度并让它们坚持下去。
答案 2 :(得分:0)
我需要稍微修改rtalbot的代码,以使其适用于我的WPF / .net 4.5项目... actualwidth和datagridlength:
// fix extra wide columns
foreach (var c in dgMain.Columns)
{
var width = c.ActualWidth;
if (width > 200)
{
c.Width = new DataGridLength(200);
}
}