如何使XAML DataGridColumns填充整个DataGrid?


116

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

当前,如果所有DataGrid列的宽度都小于DataGrid的宽度,我会出现一个多余的“列”,该列不可单击且无用。

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

Answers:


247

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

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

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


2
以及如果我正在使用,该如何做类似的事情AutoGenerateColumns="True"
javapowered

1
@javapowered-我建议问您自己的问题,并参考此问题。
克里斯·

16
@javapowered<DataGrid AutoGenerateColumns="True" ColumnWidth="*" ItemsSource={Binding} />
Xavier

11
@MohamedSakherSawan它确实为datagrid工作。无论ColumnWidth="*"数据网格,并Width="*"在蹦床网上单人列收到预期的效果
史蒂夫

1
给出错误信息无法转换为“ *”
co2f2e

18

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

这样,您可以Width="*"DataGrid.Columns/DataGridXXXXColumn元素上设置属性。


9

如前所述,该功能ColumnWidth="*"对于XAML中的DataGrid来说效果很好。

我在这种情况下使用它:

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


3

我的2分->

开派对很晚

DataGrid->列-> Width =“ *”仅在DataGrid父容器具有固定宽度时才起作用。

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


2

同一主题的另一个旋转:

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

1

我添加了Horizo​​ntalAlignment =“ Center”(默认值为“ Strech”),它解决了我的问题,因为它使datagrid仅根据需要设置了宽度。(如果有,请删除数据网格的“宽度”设置。)

在此处输入图片说明


结合选择的答案和这个答案,它为我解决了问题。我需要删除Datagrid本身的宽度。谢谢。
Bryan Harrington

0

如果,则不会扩展xaml网格的最后一列以占用剩余空间 AutoGeneratedColumns="True"


我已删除了AutoGenerateColumns,即使这些列未在数据网格/屏幕的整个宽度上进行划分或拉伸。我将网格的相应行设置为“ *”,并且列的宽度未指定任何宽度(“自动”或“某个值”)。但是我仍然遇到问题,这是我设计的xaml代码pastie.org/10085815
GK


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.