如何让 XAML DataGridColumns 填充整个 DataGrid?

我使用 XAML 中的 DataGrid (而不是 Silverlight)来调整列的大小,如果用户调整屏幕大小,DataGrid 将会扩展。

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

有人知道如何使一列总是调整大小以填满所有剩余的空间吗?

131438 次浏览

如果使用 Width="*",列将被填充以扩展可用空间。

如果希望所有列均匀地划分网格,请将此方法应用于所有列。如果你只是想要一个填充剩余的空间,只要将它应用到该列,其余的是“自动”或一个特定的宽度。

如果希望列占用可用宽度的1/4,也可以使用 Width="0.25*"(例如)。

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

这将不会展开 xaml 网格的最后一列,以便在以下情况下占用剩余的空间 AutoGeneratedColumns="True".

确保 DataGrid 将 Width设置为类似于 {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}的值。

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

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

我添加了一个 HorizontalAlign = “ Center”(默认值是“ Strech”) ,它解决了我的问题,因为它使 datagrid 只有需要的宽度。(如果有的话,删除了 datagrid 的 Width 设置。)

enter image description here

对于那些寻找 C # 解决方案的人:

如果出于某种原因需要启用“ AutoGeneratedColumns”,您可以做的一件事是指定所有列的宽度,除了那些您想要自动调整大小的列(它将 而不是占用剩余的空间,但它将 调整到单元格的内容大小)。

示例(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 的大小。

关于同一主题的另一种说法是:

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 ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

我的两分钱->

很晚才开派对

DataGrid-> Column-> Width = “ *”只有在 DataGrid 父容器具有固定宽度时才有效。

例如: 我把 DataGrid 放在 Grid-> Column 中,它的 Width = “ Auto”然后 Width = “ *”在 DataGrid 中不工作,但是如果你设置 Grid-> Column Width = “450”表示固定,那么它就工作得很好

对我来说,它工作得很好,只需将列宽依赖性属性设置为 columnwidth="*" ,它就可以像 winform (autosize = fill)那样将列宽填充到数据网格宽度

 <DataGrid Grid.Row="0" x:Name="dg1" VerticalAlignment="Top" AutoGenerateColumns="False" Margin="0,0,-6,0" Width="1520" Height="700"  CanUserAddRows="True"
        

CanUserDeleteRows="True" ItemsSource="{Binding EmployeeData}" RowDetailsVisibilityMode="Visible" HorizontalGridLinesBrush="DarkBlue" VerticalGridLinesBrush="DarkGreen" ColumnWidth="*" >