WPF中如何动态修改DataGrid的表头及单元格元素前景色
问题原因
你当前代码的核心问题是:克隆得到的新画刷对象仅存在于局部作用域中,你没有将修改后的画刷更新回资源字典,界面绑定的DynamicResource仍指向原有资源条目,因此看不到修改效果。
解决方案
修改代码,在调整画刷颜色后,将新画刷重新赋值给对应资源键即可:
var brush1 = FindResource("DgColumnElementForeground") as SolidColorBrush; if (brush1.IsFrozen) brush1 = brush1.Clone(); brush1.Color = (Color)ColorConverter.ConvertFromString(Default.dgContentFontColor); // 关键:更新资源字典中的对应条目 Resources["DgColumnElementForeground"] = brush1; var brush2 = FindResource("DgColumnHeaderForeground") as SolidColorBrush; if (brush2.IsFrozen) brush2 = brush2.Clone(); brush2.Color = (Color)ColorConverter.ConvertFromString(Default.dgHeaderFontColor); // 关键:更新资源字典中的对应条目 Resources["DgColumnHeaderForeground"] = brush2;
额外检查项
- 确认
DgColumnElementForeground、DgColumnHeaderForeground两个资源的定义层级和你操作的Resources集合层级一致:如果资源定义在Window级,就用this.Resources更新;如果定义在App级,就用Application.Current.Resources更新。 - 检查
Default.dgContentFontColor、Default.dgHeaderFontColor的字符串格式是否符合要求,需为带#的十六进制颜色值(如#FFFFFFFF、#FF212121),避免颜色转换失败。 - 你当前XAML中已经使用
DynamicResource绑定画刷,符合动态更新的要求,无需修改XAML代码。
内容的提问来源于stack exchange,提问作者Newzad K Mawatî
相关产品推荐
相关产品推荐

