我在XAML(而不是Silverlight)中使用DataGrids和可调整大小的列,如果用户调整屏幕大小,DataGrid将展开 .
目前,如果所有DataGrid列的宽度小于DataGrid的宽度,我会看到一个额外的“列”,它不可点击并且没有用处 .
有谁知道如何使一列始终调整大小以填充所有剩余空间?
如果使用 Width="*" ,则列将填充以扩展可用空间 .
Width="*"
如果您希望所有列分割网格,则将其应用于所有列 . 如果您只想填充剩余空间,只需将其应用于该列,其余为“自动”或特定宽度 .
如果希望列占可用宽度的1/4,也可以使用 Width="0.25*" (例如) .
Width="0.25*"
确保您的DataGrid Width 设置为 {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}} .
Width
{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
像这样,您在 DataGrid.Columns/DataGridXXXXColumn 元素上的 Width="*" 属性设置应该有效 .
DataGrid.Columns/DataGridXXXXColumn
将列 Width 属性设置为比例宽度,例如 *
*
如上所述,ColumnWidth =“*”对于XAML中的DataGrid非常有效 .
我在这个上下文中使用它:
<DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/>
将ONE列的宽度设置为任意值,即width =“*”
我添加了一个HorizontalAlignment =“Center”(默认为“Strech”),它解决了我的问题,因为它使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; } }
如果 AutoGeneratedColumns="True" ,这将不会扩展xaml网格的最后一列以占用剩余空间 .
AutoGeneratedColumns="True"
对于那些寻找C#解决方法的人:
如果由于某种原因需要启用"AutoGeneratedColumns",您可以做的一件事是指定除了要自动调整大小的所有列的宽度(它将 not take the remaining space ,但它将 resize to the cell's content ) .
示例(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 回答
如果使用
Width="*"
,则列将填充以扩展可用空间 .如果您希望所有列分割网格,则将其应用于所有列 . 如果您只想填充剩余空间,只需将其应用于该列,其余为“自动”或特定宽度 .
如果希望列占可用宽度的1/4,也可以使用
Width="0.25*"
(例如) .确保您的DataGrid
Width
设置为{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}
.像这样,您在
DataGrid.Columns/DataGridXXXXColumn
元素上的Width="*"
属性设置应该有效 .将列
Width
属性设置为比例宽度,例如*
如上所述,ColumnWidth =“*”对于XAML中的DataGrid非常有效 .
我在这个上下文中使用它:
将ONE列的宽度设置为任意值,即width =“*”
我添加了一个HorizontalAlignment =“Center”(默认为“Strech”),它解决了我的问题,因为它使datagrid只有所需的宽度 . (如果有的话,删除数据网格的宽度设置 . )
另一个关于同一主题的旋转:
如果
AutoGeneratedColumns="True"
,这将不会扩展xaml网格的最后一列以占用剩余空间 .对于那些寻找C#解决方法的人:
如果由于某种原因需要启用"AutoGeneratedColumns",您可以做的一件事是指定除了要自动调整大小的所有列的宽度(它将 not take the remaining space ,但它将 resize to the cell's content ) .
示例(dgShopppingCart是我的DataGrid):
对我来说,它可以作为一种解决方法,因为当用户最大化Window时我需要调整DataGrid的大小 .