C# 如何使XAML DataGridColumns填充整个DataGrid?

C# 如何使XAML DataGridColumns填充整个DataGrid?,c#,wpf,xaml,datagrid,wpf-controls,C#,Wpf,Xaml,Datagrid,Wpf Controls,我在XAML(不是Silverlight)中使用具有可调整大小的列的DataGrids,如果用户调整屏幕大小,DataGrid将扩展 目前,如果所有DataGrid列的宽度都小于DataGrid的宽度,我会看到一个额外的“列”,它是不可点击的,没有任何用途 有人知道如何始终调整一列的大小以填充所有剩余空间吗?如果使用Width=“*”该列将填充以扩展可用空间 如果希望所有列平均分割网格,请将其应用于所有列。如果您只想用一个来填充剩余的空间,只需将其应用于该列,其余部分为“自动”或特定宽度 如果希

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

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

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

如果使用
Width=“*”
该列将填充以扩展可用空间

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


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

将列
Width
属性设置为成比例的宽度,例如
*
,如果
AutoGeneratedColumns=“True”

确保数据网格的
宽度设置为
{Binding Path=ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}


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

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

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

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

如果出于某种原因需要启用“AutoGeneratedColumns”,则可以指定除要自动调整大小的列之外的所有列的宽度(它将不占用剩余空间,但将调整为单元格内容的大小)

示例(DGShoppingCart是我的数据网格):


对我来说,这是一个解决办法,因为当用户最大化窗口时,我需要调整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 ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

我的2美分->

晚会很晚了

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


示例:我将DataGrid放在Grid->Column中,其width=“Auto”然后width=“*”在DataGrid中不起作用,但是如果您将Grid->Column width=“450”设置为fixed,那么它就可以正常工作了,如果我使用的是
AutoGenerateColumns=“True”
?@javapowered-我建议问您自己的问题,引用这个。@javapowered
@MohamedSakherSawan它确实适用于datagrid。数据网格上的
ColumnWidth=“*”
和独立列上的
Width=“*”
都具有所需的效果。如果错误提示无法转换为“*”,则我已删除AutoGenerateColumns,即使这些列未分割或拉伸数据网格/屏幕的整个宽度。我将网格的对应行设置为“*”,列宽度没有指定任何宽度(无论是“自动”还是“某个值”)。但我仍然有一些问题,下面是我设计的xaml代码和选择的答案,它为我解决了这个问题。我需要删除数据网格本身的宽度。谢谢。就我而言,接受的答案也是不够的。在添加了您提到的
HorizontalAlignment=“Center”
之后,它解决了这个问题。谢谢
<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />