我在XAML(不是Silverlight)中使用DataGrids和可调整大小的列,如果用户调整屏幕大小,DataGrid将会展开。
目前,如果所有DataGrid列的宽度都小于DataGrid的宽度,我会看到一个额外的“列”,它不可点击且没有用处。
是否有人知道如何使一列始终调整大小以填充所有剩余空间?
答案 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)
我添加了一个HorizontalAlignment =" Center" (默认值为" Strech")它解决了我的问题,因为它使数据网格只需要尽可能宽。 (如果有的话,删除数据网格的宽度设置。)
答案 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”则表示固定,则可以正常工作