我最近将一个项目从.NET 4
迁移到.NET 4.7.2
,这在WinForms DataGridView头中引入了一个更改。
预迁移如下所示:
如您所见,当前单击的单元格的Header未被选中。迁移后,相同的DataGridView如下所示:
我在Release Notes上找不到任何有关WinForms DataGridView更改的信息
我尝试使用下面的代码设置颜色how to change the color of winform DataGridview header?
this.dgvUserFields.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.SystemColors.ControlDark;
this.dgvUserFields.EnableHeadersVisualStyles = false;
但代码似乎没有改变任何东西。
一些资源是否证实了这种破坏性的变化,以及如何修复它?
8条答案
按热度按时间odopli941#
此行为记录在 *DataGridView改进 * 中的.NET Framework 4.7.2辅助功能的新增功能部分中:
当
System.Windows.Forms.DataGridView.SelectionMode
设置为System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
时,当用户在当前行中的单元格之间切换时,列标题将更改颜色以指示当前列。在.NET Framework 4.7.2中,当呈现
DataGridViewColumnHeaderCell
时,它会检查列是否为IsHighlighted
,然后以推送状态呈现该列,下面是检测IsHighlighted
的逻辑:正如你在上面的代码中看到的,有
&& AccessibilityImprovements.Level2
,这意味着如果你关闭这个特性,行为将会被重置。正如Taw在评论中提到的,你可以关闭这个功能,为此,你可以将这段设置添加到
app.config
文件中:olmpazwi2#
由于我不喜欢将app.config与独立的可执行文件一起发布,因此我在program.cs中的Main()开头使用以下行来禁用“改进”:
9njqaruj3#
我的工作是:
lb3vh1jj4#
这对我有用。
de90aj5v5#
这对我很有效。在网格的“属性”窗口中:
1.将所需的ColumnHeaderDefaultCellStyle设置为您希望标题的任何外观。
1.设置启用标题可视化样式=假
r8uurelv6#
添加到Reza's answer:
随着. NET Framework 4.8的出现,有了一个新的辅助功能改进级别:
AccessibilityImprovements.Level3
因此,当添加到您的app.config:
那么在应用程序启动期间,您可能会遇到此异常:
System.NotSupportedException:"桌面应用程序需要选择加入所有早期的辅助功能改进才能获得以后的改进。为此,请确保如果AppContext开关" Switch. UseLegacyAccessibilityFeatures. N "设置为" false ",则" Switch. UseLegacyAccessibilityFeatures "和所有" Switch. UseLegacyAccessibilityFeatures. M "开关在M〈N时也计算为false。请注意,如果用于特定辅助功能改进集的开关不存在,则其值由目标Framework版本确定。您可以通过添加这些开关并将其值设置为false来解决此问题。'
要解决此问题,您还必须选择退出第3级:
请注意:
如果你已经应用了KB4569746 Cumulative Update for .NET Framework 4.8,那么你可能也必须选择退出第4级。
fhg3lkii7#
dgvUserFields.启用标题可视化样式=假;
将此添加到表单加载事件中
wnavrhmk8#
禁用“改进”确实起到了作用,但由于某种原因导致了其他问题。
我有几个表单有这个问题,而且随着应用程序的增长,还会添加更多表单。因此,我创建了自己的自定义DataGridView来处理DataGridView的ColumnStateChanged事件,并将HeaderCell的Style重置为默认背景值,这样我就不必在每个新表单上添加此行/handle事件。
1.创建应用程序要使用的自定义DataGridView。
1.在构造函数中,可以处理DataGridView的ColumnStateChanged事件,并将HeaderCell的Style重置为默认背景值:
例如(我实际上已经有一个自定义网格的其他原因,如搜索过滤):