2011-02-17 84 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="*"/>