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.
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. –
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)' –
Masz rację. Będę edytować moją odpowiedź. Dostałem ten typ przy pierwszym komentarzu, ale nie w samej odpowiedzi. – DanTheMan