如何使XAML DataGridColumns填充整个DataGrid?

我在XAML(而不是Silverlight)中使用可resize的列中的DataGrid,如果用户调整屏幕大小,DataGrid将展开。

目前,如果所有的DataGrid列的宽度小于DataGrid的宽度,我会得到一个额外的“列”出现,这是不可点击,并没有任何用途。

有谁知道如何使一列总是resize,以填补所有剩余的空间?

如果您使用Width="*"该列将填充以扩大可用空间。

如果您希望所有列均匀分割网格,则将其应用于所有列。 如果您只想填充剩余空间,只需将其应用于该列,其余的为“自动”或特定宽度。

如果您希望列占用可用宽度的四分之一,则还可以使用Width="0.25*" (例如)。

确保DataGrid的Width设置为{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}

像那样, DataGrid.Columns/DataGridXXXXColumn元素上的Width="*"属性的设置应该可以工作。

Width属性的列设置为比例宽度,例如*

我添加了一个Horizo​​ntalAlignment =“中心”(默认是“Strech”),它解决了我的问题,因为它使datagrid只有根据需要。 (如果有的话,删除datagrid的宽度设置。)

在这里输入图像说明

另一个旋转在同一主题:

 protected void OnWindowSizeChanged(object sender, SizeChangedEventArgs e) { dataGrid.Width = e.NewSize.Width - (e.NewSize.Width * .1); foreach (var column in dataGrid.Columns) { column.Width = dataGrid.Width / dataGrid.Columns.Count; } } 

如上所述,ColumnWidth =“*”对于XAML中的DataGrid非常适用。

我在这方面使用它:

  <DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/> 

如果AutoGeneratedColumns="True"这将不会扩展xaml网格的最后一列以获取剩余空间。

将一列的宽度设置为任意值,即width =“*”

对于那些正在寻找一个C#解决方法:

如果由于某种原因需要启用“AutoGeneratedColumns”,则可以执行的一项操作是指定除了要自动resize的列之外的所有列的宽度( 不会占用剩余空间 ,但会调整为细胞的内容 )。

示例(dgShopppingCart是我的DataGrid):

 dgShoppingCart.Columns[0].Visibility = Visibility.Hidden; dgShoppingCart.Columns[1].Header = "Qty"; dgShoppingCart.Columns[1].Width = 100; dgShoppingCart.Columns[2].Header = "Product Name"; /*This will be resized to cell content*/ dgShoppingCart.Columns[3].Header = "Price"; dgShoppingCart.Columns[3].Width = 100; dgShoppingCart.Columns[4].Visibility = Visibility.Hidden; 

对我来说,它是一个解决方法,因为我需要在用户最大化窗口时调整DataGrid的大小。