2009-08-07 2 views
3

У меня есть DataGrid определяется какWPF DataGrid ширины столбцов и переназначения

<wpftoolkit:DataGrid 
     x:Name="AccountsDataGrid" 
     AutoGenerateColumns="False" 
     ItemsSource="{Binding Path=Accounts}" 
     ColumnReordered="DataGrid_ColumnReordered" 
     SelectionUnit="FullRow" 
     RowHeaderWidth="0" 
     HorizontalAlignment="Stretch" 
     VerticalAlignment="Stretch" 
     > 
     <wpftoolkit:DataGrid.Columns> 
      <wpftoolkit:DataGridTextColumn Header="Account Id" Binding="{Binding Path=AccountId}" Width="Auto" /> 
      <wpftoolkit:DataGridTextColumn Header="Account Name" Binding="{Binding Path=AccountName}" Width="*" /> 
     </wpftoolkit:DataGrid.Columns> 
    </wpftoolkit:DataGrid> 

, который по нагрузке выглядит большим. первый столбец соответствует минимальной ширине, необходимой для размещения как содержимого, так и заголовка. второй столбец растягивается, чтобы заполнить остальную ширину DataGrid (поэтому у меня нет третьего столбца наполнителя). Но если я попытаюсь изменить порядок столбцов, столбец AccountName не может быть изменен до ширины меньше, чем его ширина перед переупорядочением. Поэтому я добавил обработчик события ColumnReordered, полагая, что могу просто сбросить ширину столбцов, но он, похоже, не работает. Фактически, он сжимает столбец AccountId почти до нуля, а столбцы AccountName по-прежнему не могут быть изменены меньше.

private void DataGrid_ColumnReordered(object sender, Microsoft.Windows.Controls.DataGridColumnEventArgs e) 
    { 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.Equals(AccountsDataGrid.Columns.Last())) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 

Есть ли лучший способ справиться ширину столбцов и почему столбец переназначения разорвать столбец изменения размера способность

ответ

3

Столбцы не меняя позиции в коллекции столбцов. Меняются только DisplayIndexes. Попробуйте следующее:

private void DataGrid_ColumnReordered(object sender, DataGridColumnEventArgs e) 
    { 
     int lastColumnOrder = AccountsDataGrid.Columns.Count() - 1; 
     foreach (DataGridColumn column in AccountsDataGrid.Columns) 
     { 
      if (column.DisplayIndex == lastColumnOrder) 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Star); 
      } 
      else 
      { 
       column.Width = new DataGridLength(1.0, DataGridLengthUnitType.Auto); 
      } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^