You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid滚动时列宽适配内容且最后一列填充剩余空间问题

WPF DataGrid滚动适配内容+最后一列填充剩余宽度解决方案

问题根因

直接在OnLoadingRow方法末尾设置最后一列星号宽度时,WPF布局系统尚未完成前面对所有列的Auto宽度测量计算,两次宽度修改的布局逻辑发生冲突,导致最后一列被异常压缩为最小宽度。

修复后代码

using System.Windows.Threading;

private void OnLoadingRow(object sender, DataGridRowEventArgs e)
{
    if (sender is not DataGrid dg) return;
    // 原有滚动适配列宽逻辑不变
    foreach (var c in dg.Columns) 
        c.Width = 0;
    e.Row.UpdateLayout();
    foreach (var c in dg.Columns) 
        c.Width = DataGridLength.Auto;
    
    // 将最后一列宽度设置调度到布局渲染完成后执行,避免测量冲突
    dg.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() =>
    {
        if (dg.Columns.Count > 0)
        {
            dg.Columns.Last().Width = new DataGridLength(1, DataGridLengthUnitType.Star);
        }
    }));
}

可选方案说明

你已经实现的MouseLeftButtonDown事件处理方案可以独立满足点击行任意位置选中的需求,如果不需要最后一列填充剩余宽度的视觉效果,可以不用修改原有列宽适配逻辑。


内容的提问来源于stack exchange,提问作者AsValeO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:36:02