2012-01-24 8 views
7

C#コードでWPF DataGridの列を作成しています。列の1つをDataGridの幅に自動的に伸ばしたいと思います。 XAMLではWidth="*"と設定しました。コードでどのようにすればいいですか?
C#コードからDataGrid列ストレッチを作成するには?

EDITは、回答の中には、適切なソリューションに私をリードしているようだが、私は私が何をしようとしているもう少し詳しく説明する必要があると感じ:

私は実際に導出しています新しいクラスDataGridから。

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

をしかし、これは私がスクロールすることができますので、広い列を作成します。私はuser24601のような最後の列の幅が提案設定しようとした

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

:そのコンストラクタで、私はそのような4つの列を追加しますのために非常にのためにスクロールしなさい...私が0.1またはより小さい値を使用するとき同じ問題。

私は私に間違った場所で何とかやっているようですか?

EDIT 2
OK、私は実際にScrollViewerにこれを追加しているので、私は問題がある可能性があります。私はScrollViewerを削除すると、物事はuser24601のように働く...

EDIT 3
ScrollViewerDataGridを持つときまあ、物事は動作しません...最初のいくつかの更なるテストを実行します前記。

答えて

9

を試してみてください。これらの2つの列の間の残りのスペースの80%/ 20%を分割します

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

はこのような何かを試してみてください。

+0

Hm。私もこれを考え出しましたが、これは私のウィンドウよりも広い*たくさんの列を作成します。私は少し質問を精緻化しています - 多分事がより明確になるかもしれません。 –

+0

公正にするには少し修正が必要です。あなたが書いたものは 'DataGridTextColumns'では動作しません。そこに 'dataGrid.Columns [i] .Width = new DataGridLength(1、DataGridLengthUnitType.Star)'を使用する必要があります。 –

+0

あなたは正しいです。私は私の答えを編集します。私は最初のコメントでは答えだけではなくタイプを得ました。 – DanTheMan

0

あなたが実際にそこDataGridLengthと呼ばれるものを使用しているこの

DataGrid1.Width = double.NaN;

+0

これは、「値は無限にすることはできません」という「ArgumentException」をスローします。 –

+0

この回答はデータグリッドの幅には正しいが、列の幅には正しくない。 – DanTheMan

関連する問題