2012-01-24 10 views
7

Estoy creando las columnas de un WPF DataGrid en mi código C#. Quiero que una de las columnas se estire al ancho de DataGrid automáticamente. En XAML, establecí Width="*". ¿Cómo lo hago en el código?¿Cómo hacer que la columna DataGrid se estire desde el código C#?

EDITAR
Algunas de las respuestas me parecen conducir a la solución correcta, pero me siento la necesidad de elaborar un poco más de lo que estoy tratando de hacer:

En realidad estoy derivar una nueva clase de DataGrid. En su constructor, añado cuatro columnas así:

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

I intentado fijar la anchura de la última columna como user24601 sugirió:

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

pero esto crea una columna que es tan amplio que pueda desplazarse y desplazarse por muy largo tiempo ... Mismo problema cuando uso 0.1 o incluso valores más pequeños.

Me parece que lo estoy haciendo en el lugar equivocado de alguna manera?

EDIT 2
OK, puede tener el problema, porque en realidad estoy añadiendo esto a un ScrollViewer. Voy a correr algunas pruebas adicionales primeros ...

EDITAR 3
Bueno, las cosas no funcionan al tener la DataGrid dentro de un ScrollViewer ... Cuando quito el ScrollViewer, las cosas funcionan como user24601 dijo.

Respuesta

9

En realidad se están usando algo llamado DataGridLength allí.

intentar algo como esto:

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

que dividirá el espacio restante 80%/20% entre estas dos columnas.

+0

Hm. También se me ocurrió esto, pero esto crea que la columna sea * mucho * más ancha que mi ventana. Estoy elaborando mi pregunta un poco, tal vez las cosas se vuelven más claras. –

+0

Para ser justos, se necesita una pequeña corrección: lo que usted escribió no funciona para 'DataGridTextColumns'. Allí, tiene que usar 'dataGrid.Columns [i] .Width = new DataGridLength (1, DataGridLengthUnitType.Star)' –

+0

Tiene razón. Editaré mi respuesta. Obtuve el tipo correcto en el primer comentario, no en la respuesta misma. – DanTheMan

0

probar esto

DataGrid1.Width = double.NaN;

+0

Esto arroja una 'ArgumentException' que dice que' value no puede ser infinito'. –

+0

Esta respuesta es correcta para el ancho de la cuadrícula de datos, no para el ancho de una columna. – DanTheMan

Cuestiones relacionadas