如何使XAML DataGridColumns填充整个DataGrid?

时间:2011-02-17 12:27:35

标签: c# wpf xaml datagrid wpf-controls

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

目前,如果所有DataGrid列的宽度都小于DataGrid的宽度,我会看到一个额外的“列”,它不可点击且没有用处。

是否有人知道如何使一列始终调整大小以填充所有剩余空间?

10 个答案:

答案 0 :(得分:224)

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

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

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

答案 1 :(得分:15)

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

就像那样,您对Width="*"元素的DataGrid.Columns/DataGridXXXXColumn属性设置应该有效。

答案 2 :(得分:7)

如上所述,response.data对于XAML中的DataGrid非常有效。

我在这种情况下使用它:

ColumnWidth="*"

答案 3 :(得分:6)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我添加了一个Horizo​​ntalAlignment =" Center" (默认值为" Strech")它解决了我的问题,因为它使数据网格只需要尽可能宽。 (如果有的话,删除数据网格的宽度设置。)

enter image description here

答案 6 :(得分:1)

关于同一主题的另一个旋转:

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;
    }
 }

答案 7 :(得分:0)

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

答案 8 :(得分:0)

对于那些寻找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; 

对我而言,它可以作为一种解决方法,因为当用户最大化Window时,我需要调整DataGrid的大小。

答案 9 :(得分:0)

我的2分->

晚会很晚

DataGrid->列-> Width =“ *”仅在DataGrid父容器具有固定宽度的情况下有效。

示例:我将DataGrid放入Grid->宽度为“ Auto”的列,然后DataGrid中的Width =“ *”不起作用,但是如果设置Grid-> Column Width =“ 450”则表示固定,则可以正常工作