WPF DataGrid 列宽自动和滚动条

Posted

技术标签:

【中文标题】WPF DataGrid 列宽自动和滚动条【英文标题】:WPF DataGrid Column Width Auto and Scrollbar 【发布时间】:2012-11-17 21:00:47 【问题描述】:

我有一个包含许多列的 DataGrid。

我想要Width="Auto",如果窗口比所有列都窄,滚动条会显示所有内容。如果窗口更宽,我希望列跨越空白空间,因此没有死区。

基本上我希望列的最小宽度完全适合内容或标题。如果窗口更宽,则扩大到更大。

【问题讨论】:

你能发布你目前拥有的 xaml 吗? 如果宽度设置为自动,滚动条永远不会出现。 @EduardoBrites 修改问题以添加更多说明 好的。你看到这个答案了吗? ***.com/a/4011435/1132646 @EduardoBrites 实际上刚刚发现了这个问题,花了一个多小时在这个问题上,之前找不到任何东西。如果解决了这个问题,我会删除它 【参考方案1】:

为了按照您的指定“填充”WPF DataGrid 中的所有水平空间,请确保您在 XAML 中设置了这些属性:

<DataGrid 
   HorizontalAlignment="Stretch" 
   HorizontalContentAlignment="Stretch" 
   ColumnWidth="*" />

【讨论】:

此解决方案可防止网格在宽度不足以容纳所有列的内容时获得水平滚动条。【参考方案2】:

在 XAML 中设置 DataGrid ColumnWidth="Auto"

在 UserControl 构造函数中添加

dataGrid.Loaded += (s, e) =>  // Column widths
    dataGrid.Columns.AsParallel().ForEach(column => 
        column.MinWidth = column.ActualWidth;
        column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    );
;

将它与自定义 DataGrid 一起使用,效果很好。

【讨论】:

-1 无法使用标准 WPF 和 .NET 4.5 进行编译;如果没有提供代码,那么说它与 custom Datagrid 一起工作没有多大用处 -1 也 AsParallel() 在处理 GUI 元素时通常是一个很大的禁忌 @Brent AsParallel().ForEach() 将使用thread pool。关于 DataGrid 线程安全,如果我可以引用 MSDN:“不保证任何实例成员都是线程安全的” msdn.microsoft.com/en-us/library/… @MickyDuncan 你在那里纠正,它可能不是线程安全的,但是在这种情况下执行的操作很好,因为我们知道我们是唯一在执行此代码时更改这些设置的人。 表示 ForEach 不能用于数据网格。

以上是关于WPF DataGrid 列宽自动和滚动条的主要内容,如果未能解决你的问题,请参考以下文章

wpf datagrid 滚动条如何设置宽度和颜色

如何在 WPF Datagrid 上启用滚动条?

WPF实现两个DataGrid列表的滚动条同步

WPF拖动DataGrid滚动条时内容混乱的解决方法

WPF DataGrid:如何在单击单元格时停止自动滚动?

jquery easyUI datagrid如何让宽度自适应