WPF DataGrid列宽度自动和滚动条

Bre*_*ent 15 wpf user-interface xaml width

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

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

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

Ale*_*ell 26

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

<DataGrid 
   HorizontalAlignment="Stretch" 
   HorizontalContentAlignment="Stretch" 
   ColumnWidth="*" />
Run Code Online (Sandbox Code Playgroud)

  • 此解决方案可防止网格在不足以容纳所有列的内容的情况下获得水平滚动条. (5认同)

Bre*_*ent 9

在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);
    });
};
Run Code Online (Sandbox Code Playgroud)

将它与自定义DataGrid一起使用并且效果很好.

  • -1也是**AsParallel()**在处理GUI元素时通常是一个很大的no no (4认同)
  • @Brent**AsParallel().ForEach()**将使用[thread pool](http://stackoverflow.com/questions/15122756/difference-between-threadpool-queueuserworkitem-and-parallel-foreach).关于DataGrid线程安全,如果我可以引用MSDN:_"任何实例成员都不保证是线程安全的"_ http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.aspx (2认同)