2015-12-01 8 views
0

У меня есть DataGrid которого столбец свойства должны быть изменены программно в коде позади для этого я использую событиеC# WPF, как изменить размер DataGrid столбцы пропорционально в коде позади

AutoGeneratingColumn="Datagrid_AutoGeneratingColumn" 

, на котором я:

private void Datagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    string strDatagridName = (sender as DataGrid).Name; 
    switch (strDatagridName.ToUpper()) 
    { 
    case "DTGPPTAB1": 
    case "DTGPPTAB3": 
     switch (e.PropertyName.ToUpper()) 
     { 
     /*----Visible ----*/ 
     case "DESCRIPTION": e.Column.Header = Langs.Word(Langs.eWords.Description); e.Column.Width = 33; break;<-------------here 
     case "NOTE": e.Column.Header = Langs.Word(Langs.eWords.Notes); break; 
     case "PARTPROGRAMFILENAME": e.Column.Header = Langs.Word(Langs.eWords.PPfilename); break; 

      /*----Hidden ----*/ 
     case "LSTBLADES": e.Column.Header = Langs.Word(Langs.eWords.Blades); break; 
     case "LSTMYIMAGES": e.Column.Header = Langs.Word(Langs.eWords.Image); e.Column.Visibility = Visibility.Collapsed; break; 
     case "LSTMYSOUNDFILES": e.Column.Header = Langs.Word(Langs.eWords.Sound); e.Column.Visibility = Visibility.Collapsed; break; 
     case "BARCODE": e.Column.Header = Langs.Word(Langs.eWords.Barcode); e.Column.Visibility = Visibility.Collapsed; break; 
     case "PROGRAMTRACEFIELDS": e.Column.Header = Langs.Word(Langs.eWords.ProgramTracefields); e.Column.Visibility = Visibility.Collapsed; break; 
     default: e.Column.Header = e.PropertyName; break; 
     } 
     break; 
    } 

и все работает нормально. Что мне нужно в случае ОПИСАНИЕ. Здесь я могу установить столбец widht в пикселях, но я не могу установить его пропорционально, например. 33%.

Итак, я хотел бы установить первые три столбца для разделения всего пространства данных в 33% 33% 33%. Так что в% вместо, а не в пикселях. Thanx

ответ

3

вместо установки Width к double, вам необходимо установить его в DataGridLength. Вот пример:

e.Column.Width = new DataGridLength(1, DataGridLengthUnitType.Star); 

Установка этих столбцов 1* должно быть достаточно, чтобы распределить ширину достаточно (33% в течение 3 столбцов).

+0

Thanx миллион. Итак, 1 * означает такую ​​же ширину? – Patrick

+0

Да, в значительной степени. Это все относительные размеры. Если все они установлены на 1 *, то они будут иметь одинаковый размер относительно размера 'DataGrid'. –