2012-01-24 19 views
7

Tôi đang tạo các cột của WPF DataGrid trong mã C# của tôi. Tôi muốn một trong các cột tự động kéo dài đến chiều rộng của DataGrid. Trong XAML, tôi muốn đặt Width="*". Làm thế nào để làm điều đó trong mã?Làm cách nào để tạo cột DataGrid kéo dài từ mã C#?

EDIT
Một số các câu trả lời dường như đưa tôi đến với những giải pháp phù hợp, nhưng tôi cảm thấy tôi cần phải xây dựng một chút nhiều hơn những gì tôi đang cố gắng để làm:

Tôi thực sự phát sinh một lớp mới từ DataGrid. Trong constructor của nó, tôi thêm bốn cột như thế:

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); 

tôi đã cố gắng thiết lập chiều rộng cột cuối cùng của giống user24601 gợi ý:

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

Nhưng điều này tạo ra một cột rằng như vậy là rộng Tôi có thể di chuyển và cuộn cho rất thời gian dài ... Cùng một vấn đề khi tôi sử dụng 0.1 hoặc thậm chí giá trị nhỏ hơn.

Tôi có vẻ như tôi đang làm điều đó ở sai chỗ nào đó?

EDIT 2
OK, tôi có thể có vấn đề bởi vì tôi thực sự thêm này cho một người ScrollViewer. Tôi sẽ chạy một số xét nghiệm chuyên sâu đầu tiên ...

EDIT 3
Vâng, mọi thứ không hoạt động khi có DataGrid trong một ScrollViewer ... Khi tôi loại bỏ các ScrollViewer, mọi thứ hoạt động như user24601 nói.

Trả lời

9

Bạn đang thực sự sử dụng một cái gì đó gọi là DataGridLength đó.

Hãy thử một cái gì đó như thế này:

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

Đó sẽ chia còn lại không gian 80%/20% giữa hai cột này.

+0

Hm. Tôi cũng đã nghĩ ra điều này, nhưng điều này tạo ra cột * rộng hơn rất nhiều * so với cửa sổ của tôi. Tôi đang xây dựng câu hỏi của mình một chút - có thể mọi thứ trở nên rõ ràng hơn. –

+0

Để công bằng, cần chỉnh sửa một chút: Những gì bạn đã viết không hoạt động với 'DataGridTextColumns'. Ở đó, bạn phải sử dụng 'dataGrid.Columns [i] .Width = new DataGridLength (1, DataGridLengthUnitType.Star)' –

+0

Bạn đúng. Tôi sẽ chỉnh sửa câu trả lời của mình. Tôi nhận được loại ngay tại bình luận đầu tiên không chỉ trong câu trả lời. – DanTheMan

0

thử này

DataGrid1.Width = double.NaN;

+0

Điều này ném một 'ArgumentException' nói rằng' giá trị không thể là vô hạn'. –

+0

Câu trả lời này là đúng cho chiều rộng datagrid, không cho chiều rộng của cột. – DanTheMan

Các vấn đề liên quan