2011-02-17 86 views
96

我在XAML(不是Silverlight)中使用可调整大小的列的DataGrid,如果用户调整屏幕大小,DataGrid将展开。如何让XAML DataGridColumns填充整个DataGrid?

目前,如果所有的DataGrid列的宽度小于DataGrid中,我得到一个额外的“列”的宽度出现是不可点击,并没有任何用处。

有谁知道如何让一列总是调整大小来填充所有剩余空间?

回答

199

如果使用Width="*"列将填补扩大可用空间。

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

您还可以,如果你想列占用的可用宽度的1/4使用Width="0.25*"(例如)。

+0

谢谢你,解决它 – Purplegoldfish 2011-02-17 13:37:50

+2

以及如何做类似的事情,如果我使用'的AutoGenerateColumns =“真”`? – javapowered 2011-11-21 07:54:32

5

集中的列Width属性是一个比例的宽度,如*

0

这不会扩大XAML网格的最后一列,如果 AutoGeneratedColumns="True"采取的剩余空间。

9

确保你的DataGrid有Width一套喜欢的东西{Binding Path=ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window,AncestorLevel=1}}

这样的,你对DataGrid.Columns/DataGridXXXXColumn元素Width="*"属性的设置应该工作。

0

组一个列的宽度设置为任意值,即宽度=“*”

1

我加了的Horizo​​ntalAlignment =“中心”(默认为“STRECH”),它解决了我的问题,因为它提出的数据网格只根据需要广泛。 (删除,如果你有一个DataGrid的宽度设置。)

enter image description here

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; 

对我来说,因为我需要有当用户最大化窗口调整DataGrid中它可以作为一种解决方法。

1

同一主题的另一种旋:在XAML一个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; 
     } 

    } 
2

如前所述,columnWidth时= “*” 工作得很好。

我用它在这方面:

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