DataSrid-Column宽度未更新ItemsSource更改

jes*_*582 4 wpf datagrid resize

XAML:

<DataGrid.Columns>
    <DataGridTextColumn x:Name="colDisplayName" Width="Auto" IsReadOnly="True" Header="Name" Binding="{Binding ssn.SSN_DISPLAY_NAME}"></DataGridTextColumn>
    <DataGridTextColumn x:Name="colValue" Width="Auto" Header="Value" Binding="{Binding ssv.SSV_VALUE}" CellStyle="{StaticResource SingleClickEditing}"></DataGridTextColumn>
    <DataGridTextColumn x:Name="colDescription" Width="Auto" IsReadOnly="True" Header="Description" Binding="{Binding ssn.SSN_DESCRIPTION}"></DataGridTextColumn>
    <DataGridTextColumn x:Name="colUnit" Width="Auto" IsReadOnly="True" Header="Unit Abbreviation" Binding="{Binding ssn.UNIT_TYPE.UNIT_NAME.UN_ABBREVIATION}"></DataGridTextColumn>
    </DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

CS:

private void tvSystemConfiguration_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
       {
           dgSystemSettings.ItemsSource =
               ((tvSystemConfiguration.SelectedItem as SYSTEM_SETTINGS_GROUP).SYSTEM_SETTINGS_NAMEs.Join
               (ssdc.SYSTEM_SETTINGS_VALUEs, x => x.SSN_ID, y => y.SSV_SSN_ID, (x, y) => new DataGridItem{ ssn = x, ssv = y })).ToList();
       }
Run Code Online (Sandbox Code Playgroud)

当列大小增加时,列宽会缩小以正确拟合,但在列大小减小时,列宽不会适当缩小以适应.在增加后,它不会减少ItemsSource更新上列的大小.希望有道理.任何帮助表示赞赏.谢谢.

Dav*_*vid 7

抱歉,对我没有任何意义.

我理解代码,但这一部分:

当列大小增加时,列宽会缩小以正确拟合,但在列大小减小时,列宽不会适当缩小以适应.在增加后,它不会减少ItemsSource更新上列的大小

让我感到困惑

我这样理解:

如果列的内容宽度增加,则列的宽度会增加,但如果内容的宽度减小,则列的宽度不会增加.

是对的吗 ?

如果是这样,这种行为是正常的:如果需要,Wpf只会调整数据网格的列宽设置为自动,即:内容无法完全显示.因此,当内容的宽度缩小时,列不会调整大小,因为仍然可以完全看到内容.

我可以看到迫使wpf重新计算列的宽度的唯一方法是强制它们全部为0,然后在后面的代码中返回auto,抛出一个或两个updateLayout(),但这不是很好的编程: - /

编辑: 基本上,在你的代码背后:

foreach (DataGridColumn c in dg.Columns)
    c.Width = 0;

// Update your DG's source here

foreach (DataGridColumn c in dg.Columns)
    c.Width = DataGridLength.Auto;
Run Code Online (Sandbox Code Playgroud)

你可能需要一个dg.UpdateLayout()或两个在那里(更新后和设置回自动)

  • 是的,这正是我的问题,一切都完美地增加,但当列的内容缩小时,它不会正确调整列宽. (2认同)