我有一個包含一些數據的WPF DataGrid
。我想設置列的寬度,使內容適合並永遠不會被裁剪(相反,水平滾動條應可見)。此外,我希望DataGrid
可以填滿整個空間(我正在使用DockPanel
)。我使用下面的代碼(簡化):如何設置DataGridColumn的寬度以適應內容(「Auto」),但是完全填充MVVM中DataGrid的可用空間?
<DataGrid ItemsSource="{Binding Table}">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100" Width="Auto" Header="Column 1" Binding="{Binding Property1}" />
<DataGridTextColumn MinWidth="200" Width="Auto" Header="Column 2" Binding="{Binding Property2}" />
</DataGrid.Columns>
</DataGrid>
這顯然不開箱即用Width="Auto"
工作,因爲它總是看起來是這樣的:
這顯然看起來醜陋。我希望將整行選中,或者,更好的是填充整個寬度的列,但正如人們所看到的,這不起作用。
如果我用Width="*"
代替,那麼列的內容會被裁剪,這對我來說更糟糕。
我發現了一個similar question here,並且在那裏發佈瞭解決方法。這可能會起作用,但我正在使用MVVM模式,所以ItemsSource在ViewModel中得到更新,我無法想象從那裏做的一種方式,因爲我無法訪問DataGridColumn
的ActualWidth
屬性。另外,如果可能的話,我只想在XAML中執行此操作。
我將不勝感激任何幫助。謝謝!
編輯:由於我仍然不知道該怎麼做,我開始一個小賞金。我會很高興提出一個建議,可以對我的問題做些什麼。再次感謝!
編輯2:在saus的回答之後,我再次考慮了選項。問題是我需要在應用程序運行期間更新Width
和MinWidth
屬性,所以不僅在加載窗口之後。我已經試過當DataGrid
的根本ItemsSource
正在更新被解僱一些事件做一些像
column.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
column.MinWidth = column.ActualWidth;
column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
。但是,這不起作用,ActualWidth
屬性在Auto
上設置Width
後似乎沒有更改。有沒有一種選擇來「重畫」它,以獲得ActualWidth
屬性更新?謝謝!
我不知道我明白你想在這裏做什麼。如果列的寬度比您想要垂直滾動條的`DataGrid`寬,並且不希望文本換行?你的意思是一個水平滾動條?否則,這對我來說沒有意義,但也許我只是在這裏緩慢:) – 2011-02-17 09:55:09
感謝您的提示!當然,我的意思是一個水平滾動條,它不會有任何意義,否則;-) – 2011-02-17 13:13:08