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
相关产品推荐
相关产品推荐

