Ширина столбца WPF DataGrid и переупорядочение - PullRequest
3 голосов
/ 07 августа 2009

У меня есть 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 (поэтому у меня нет 3-го столбца заполнителя). Но если я попытаюсь изменить порядок столбцов, размер столбца 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);
            }
        }
    }

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

1 Ответ

3 голосов
/ 08 марта 2011

Столбцы не меняют положение в коллекции столбцов. Только 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);
            }
        } 
    }
...