2012-01-24 12 views
7

Tworzę kolumny pliku WPF DataGrid w moim kodzie C#. Chcę, aby jedna z kolumn automatycznie rozciągnęła się na szerokość DataGrid. W XAML ustawiłbym Width="*". Jak zrobić to w kodzie?Jak rozłożyć kolumnę DataGrid z kodu C#?

EDIT
Niektóre z odpowiedzi wydają się doprowadzić mnie do właściwego rozwiązania, ale czuję, że trzeba opracować trochę więcej, co usiłuję zrobić:

ja faktycznie uzyskiwanie nowa klasa od DataGrid. W jej konstruktora, dodaję cztery kolumny tak:

this.IsReadOnly = true; 
this.AutoGenerateColumns = false; 
this.ItemsSource = m_dataSource; 

DataGridTextColumn anColumn = new DataGridTextColumn() { Header = "Col1", Binding = new Binding("B1") }; 
DataGridTextColumn tpColumn = new DataGridTextColumn() { Header = "Col2", Binding = new Binding("B2") }; 
DataGridTextColumn txColumn = new DataGridTextColumn() { Header = "Col3", Binding = new Binding("B3") }; 
DataGridTextColumn mdColumn = new DataGridTextColumn() { Header = "Col4", Binding = new Binding("B4") }; 

this.Columns.Add(anColumn); 
this.Columns.Add(tpColumn); 
this.Columns.Add(txColumn); 
this.Columns.Add(mdColumn); 

Próbowałem ustawienie szerokości ostatniej kolumnie niczym user24601 zasugerował:

mdColumn.Width = new DataGridLength(0.5, DataGridLengthUnitType.Star); 

Ale to tworzy kolumnę, która jest tak szeroki mogę przewinąć i przewijanie przez długi czas bardzo Ten sam problem, gdy używam 0.1 lub nawet mniejszych wartości.

Wydaje mi się, że robię to w złym miejscu jakoś?

EDIT 2
OK, mogę mieć problem, bo ja rzeczywiście dodanie tego do ScrollViewer. Będę działać niektóre dalsze testy pierwsze ...

EDIT 3
Cóż, coś nie działa, gdy mając DataGrid w ScrollViewer ... Kiedy usunąć ScrollViewer, wszystko działa jak user24601 powiedziany.

Odpowiedz

9

jesteś rzeczywiście użyciu coś o nazwie DataGridLength tam.

spróbować czegoś takiego:

Grid.ColumnDefinitions[0].Width = new DataGridLength(0.2, DataGridLengthUnitType.Star); 
Grid.ColumnDefinitions[1].Width = new DataGridLength(0.8, DataGridLengthUnitType.Star); 

To będzie podzielić pozostałą przestrzeń 80%/20% pomiędzy tymi dwoma kolumnami.

+0

Hm. Też to wymyśliłem, ale to powoduje, że kolumna jest * dużo * szersza niż moje okno. Opracowuję moje pytanie trochę - może rzeczy staną się wyraźniejsze. –

+0

Aby być uczciwym, potrzebna jest niewielka korekta: to, co napisałeś, nie działa dla 'DataGridTextColumns'. Tam musisz użyć 'dataGrid.Columns [i] .Width = new DataGridLength (1, DataGridLengthUnitType.Star)' –

+0

Masz rację. Będę edytować moją odpowiedź. Dostałem ten typ przy pierwszym komentarzu, ale nie w samej odpowiedzi. – DanTheMan

0

spróbować tej

DataGrid1.Width = double.NaN;

+0

Powoduje to wyrażenie 'ArgumentException', mówiąc, że' wartość nie może być nieskończona '. –

+0

Ta odpowiedź jest poprawna dla szerokości datagridu, a nie dla szerokości kolumny. – DanTheMan