C# WPF后台设置控件样式失效的解决方法
现象描述
在某些特殊场景下,需要在后台代码设置WPF控件的样式属性,结果只会影响展示出来的数据,并没有对全体生效。(例如设置的内容只影响了滚动条对应区域,位于滚动条下方的没有生效)。
解决方法
禁用虚拟化,设置属性
EnableRowVirtualization=“False”
EnableColumnVirtualization=“False”
原因
在 WPF 中,DataGrid 默认启用了 UI 虚拟化(UI Virtualization),这会导致只渲染当前可见的行,以提高性能。
注意事项
性能考虑:禁用虚拟化后,大数据量会导致内存占用增加和UI响应变慢
替代方案:考虑使用分页或延迟加载(Lazy Loading)
滚动性能:可以设置 ScrollViewer.CanContentScroll=“False” 改善滚动体验
绑定更新:确保数据源的更改通知正确实现(如使用 ObservableCollection)