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