我正在使用XAML中的DataGrid(不是Silverlight),并且具有可调整大小的列,如果用户调整屏幕大小,则DataGrid将扩展。
目前,如果所有DataGrid列的宽度小于DataGrid的宽度,则会出现一个额外的“列”,该列无法单击,并且没有任何作用。
有没有人知道如何使一列始终调整大小以填充所有剩余空间?
我正在使用XAML中的DataGrid(不是Silverlight),并且具有可调整大小的列,如果用户调整屏幕大小,则DataGrid将扩展。
目前,如果所有DataGrid列的宽度小于DataGrid的宽度,则会出现一个额外的“列”,该列无法单击,并且没有任何作用。
有没有人知道如何使一列始终调整大小以填充所有剩余空间?
Width="*"
,该列将填充以扩展可用空间。Width="0.25*"
(例如)如果您希望该列占用可用宽度的 1/4。确保您的DataGrid已将 Width
设置为类似于 {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
。
这样,您在DataGrid.Columns/DataGridXXXXColumn
元素上设置Width="*"
属性应该可以正常工作。
正如注释所述,对于XAML中的DataGrid来说,ColumnWidth="*"
效果非常好。
我在这个上下文中使用了它:
<DataGrid ColumnWidth="*" ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
我个人意见 ->
很晚才加入
DataGrid -> Column -> Width="*" 只有在 DataGrid 父容器有固定宽度时才起作用。
例如:我把 DataGrid 放在 Grid -> Column 中,其中 Grid -> Column 的宽度为 "Auto",那么在 DataGrid 中设置 Width="*" 就无效了。但是如果你将 Grid -> Column 的宽度设置为 "450" 即固定值,则它就可以正常工作。
将列的Width
属性设置为比例宽度,例如*
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;
}
}
我添加了一个HorizontalAlignment="Center"属性(默认值为"Stretch"),这解决了我的问题,因为它使得数据表格的宽度只有所需的宽度。(如果您设置了宽度,请删除数据表格的宽度设置。)
HorizontalAlignment="Center"
之后,问题得到了解决。谢谢! - Stan1kAutoGeneratedColumns="True"
,那么这将不会扩展XAML网格的最后一列以填充剩余空间。对于那些寻找 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的大小。
这对我很有效,只需将columnwidth依赖属性设置为columnwidth="*"
它将填充列宽度到datagrid宽度,就像winforms(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="*" >
AutoGenerateColumns="True"
,如何做类似的事情? - Oleg VazhnevColumnWidth="*"
或在各个列上设置Width="*"
都会产生预期效果。 - Steve