如何使XAML DataGridColumns填充整个DataGrid?
我在XAML(而不是Silverlight)中使用可resize的列中的DataGrid,如果用户调整屏幕大小,DataGrid将展开。
目前,如果所有的DataGrid列的宽度小于DataGrid的宽度,我会得到一个额外的“列”出现,这是不可点击,并没有任何用途。
有谁知道如何使一列总是resize,以填补所有剩余的空间?
如果您使用Width="*"
该列将填充以扩大可用空间。
如果您希望所有列均匀分割网格,则将其应用于所有列。 如果您只想填充剩余空间,只需将其应用于该列,其余的为“自动”或特定宽度。
如果您希望列占用可用宽度的四分之一,则还可以使用Width="0.25*"
(例如)。
确保DataGrid的Width
设置为{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
。
像那样, DataGrid.Columns/DataGridXXXXColumn
元素上的Width="*"
属性的设置应该可以工作。
将Width
属性的列设置为比例宽度,例如*
我添加了一个HorizontalAlignment =“中心”(默认是“Strech”),它解决了我的问题,因为它使datagrid只有根据需要。 (如果有的话,删除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非常适用。
我在这方面使用它:
<DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/>
如果AutoGeneratedColumns="True"
这将不会扩展xaml网格的最后一列以获取剩余空间。
将一列的宽度设置为任意值,即width =“*”
对于那些正在寻找一个C#解决方法:
如果由于某种原因需要启用“AutoGeneratedColumns”,则可以执行的一项操作是指定除了要自动resize的列之外的所有列的宽度( 不会占用剩余空间 ,但会调整为细胞的内容 )。
示例(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的大小。