0

我有一个数据网格,其列属性必须在代码中以编程方式更改为此我使用事件

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

一切正常。我需要的是在说明案例中。在这里,我可以设置以像素为单位的列宽度,但我无法按比例设置它,例如 33%。

所以简而言之,我想设置前 3 列将整个数据网格空间划分为 33% 33% 33%。所以用 % 而不是像素。谢谢

4

1 回答 1

3

您需要将其设置Width为 a ,而不是将其设置为 a 。这是一个例子:doubleDataGridLength

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

将这些列设置为1*应该足以公平地分配宽度(3 列为 33%)。

于 2015-12-01T09:58:53.380 回答