C# WPF后台设置控件样式失效的解决方法

现象描述

在某些特殊场景下,需要在后台代码设置WPF控件的样式属性,结果只会影响展示出来的数据,并没有对全体生效。(例如设置的内容只影响了滚动条对应区域,位于滚动条下方的没有生效)。

解决方法

禁用虚拟化,设置属性

EnableRowVirtualization="False"

EnableColumnVirtualization="False"

原因

在 WPF 中,DataGrid 默认启用了 UI 虚拟化(UI Virtualization),这会导致只渲染当前可见的行,以提高性能。

注意事项

性能考虑:禁用虚拟化后,大数据量会导致内存占用增加和UI响应变慢

替代方案:考虑使用分页或延迟加载(Lazy Loading)

滚动性能:可以设置 ScrollViewer.CanContentScroll="False" 改善滚动体验

绑定更新:确保数据源的更改通知正确实现(如使用 ObservableCollection)