首页 文章

如何使XAML DataGridColumns填充整个DataGrid?

提问于
浏览
102

我在XAML(而不是Silverlight)中使用DataGrids和可调整大小的列,如果用户调整屏幕大小,DataGrid将展开 .

目前,如果所有DataGrid列的宽度小于DataGrid的宽度,我会看到一个额外的“列”,它不可点击并且没有用处 .

有谁知道如何使一列始终调整大小以填充所有剩余空间?

9 回答

  • 12

    如果使用 Width="*" ,则列将填充以扩展可用空间 .

    如果您希望所有列分割网格,则将其应用于所有列 . 如果您只想填充剩余空间,只需将其应用于该列,其余为“自动”或特定宽度 .

    如果希望列占可用宽度的1/4,也可以使用 Width="0.25*" (例如) .

  • 1

    确保您的DataGrid Width 设置为 {Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}} .

    像这样,您在 DataGrid.Columns/DataGridXXXXColumn 元素上的 Width="*" 属性设置应该有效 .

  • 0

    将列 Width 属性设置为比例宽度,例如 *

  • 0

    如上所述,ColumnWidth =“*”对于XAML中的DataGrid非常有效 .

    我在这个上下文中使用它:

    <DataGrid ItemsSource="{Binding AllFolders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" ColumnWidth="*"/>
    
  • 1

    将ONE列的宽度设置为任意值,即width =“*”

  • 5

    我添加了一个HorizontalAlignment =“Center”(默认为“Strech”),它解决了我的问题,因为它使datagrid只有所需的宽度 . (如果有的话,删除数据网格的宽度设置 . )

    enter image description here

  • 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;
            }
    
        }
    
  • 218

    如果 AutoGeneratedColumns="True" ,这将不会扩展xaml网格的最后一列以占用剩余空间 .

  • 5

    对于那些寻找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的大小 .

相关问题