2013-02-06 110 views
0

我有一個數據網格,他的ItemSource結合到下面的對象改變列寬度:根據內容

public ObservableCollection<X> MyCollection{ get; set; } 

類X包含了所有的數據到DataGrid的列

實施例:

private string name; 

public string Name 
{ 
    get { return name; } 
    set 
    { 
     name= value; 
     NotifyPropertyChanged("Name"); 
    } 
} 

有什麼我可以設置在XAML到列的寬度將根據內容(當內容將改變寬度也將相應改變)?

我見過一些在C#代碼中這樣做的例子,我希望它在XAML中完成,有可能嗎?

編輯:

的DataGrid:

<DataGrid x:Name="DG" ItemsSource="{Binding}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
    <DataGridTextColumn Header="{x:Static p:Resources.Name}" Binding="{Binding Name}"></DataGridTextColumn> 
    <DataGridTextColumn Header="{x:Static p:Resources.x}" Binding="{Binding X}"></DataGridTextColumn> 
    <DataGridTextColumn Header="{x:Static p:Resources.y}" Binding="{Binding Y}"></DataGridTextColumn> 
    </DataGrid.Columns> 
</DataGrid> 
+0

它擴展基於內容的列,但是當內容小於寬度之前他不減少回來。 –

回答

1

分配的可用空間如果你明確定義在XAML來柱像你這樣,只是將寬度設置爲自動。這應該是默認的。

<DataGridTextColumn Width="Auto" Header="{x:Static p:Resources.Name}" Binding="{Binding Name}"></DataGridTextColumn> 
+0

我試過了,仍然是這個問題不會有小寬度 –

+0

好吧我現在明白你的問題了。您希望列隨着內容變小而縮小。它看起來像你將不得不沮喪,並引入一些代碼來爲你做不幸的事情。請參閱[DataGrid - 列寬未更新ItemsSource更改](http://stackoverflow.com/questions/4725724/datagrid-column-widths-not-updating-on-itemssource-change) – bean

3

您可以設置ColumnWidth="SizeToCells"這會工作。

<DataGrid x:Name="DG" ColumnWidth="SizeToCells" ItemsSource="{Binding}" AutoGenerateColumns="False"> 

Avaliable大小模式供ColumnWidth

  • 自動默認自動調整大小模式基於兩個小區和列標題中的內容數據網格大小的列。
  • SizeToCells基於單元格的自動調整大小模式根據列中單元格的內容大小DataGrid列,不包括 列標題。
  • SizeToHeader基於標題的自動調整大小模式僅基於列標題的內容大小DataGrid列。
  • 像素基於像素的大小調整模式根據提供的數值對DataGrid列進行大小調整。
  • 星號(*)星上漿模式通過權重比例
+0

@Hodaya Shalom儘管這種做法不推薦,因爲它有性能問題,SizeToCells會等待所有數據加載,然後根據最長的一個計算列寬。所以,小心點。 – HichemSeeSharp

+0

它仍然不起作用,它基於內容擴展列,但是當內容小於寬度時,他不會減少回 –

+0

當內容更改時,它應該單獨刷新? –