.NET 4.0 和 .NET 4.7.2 标头选择之间 DataGridView 的重大变化

Con*_*ole 9 c# datagridview winforms

我最近迁移了一个项目,其中.NET 4引入.NET 4.7.2了 WinForms DataGridView 标头的更改。

预迁移如下所示: 在此输入图像描述

如您所见,我当前单击的单元格的标题未被选中。迁移后,相同的 DataGridView 如下所示: 在此输入图像描述我在发行说明 中找不到任何提及 WinForms DataGridView 更改的信息

我尝试使用以下代码设置颜色, 如何更改 winform DataGridview 标头的颜色?

this.dgvUserFields.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.SystemColors.ControlDark;
this.dgvUserFields.EnableHeadersVisualStyles = false;
Run Code Online (Sandbox Code Playgroud)

但代码似乎没有改变任何东西。

一些资源是否确认了重大更改,以及如何修复它?

Rez*_*aei 10

该行为记录在DataGridView 改进部分的 .NET Framework 4.7.2 中的辅助功能新增功能 中:

System.Windows.Forms.DataGridView.SelectionMode设置为 时 System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect,当用户按 Tab 键浏览当前行中的单元格时,列标题将更改颜色以指示当前列。

在 .NET Framework 4.7.2 中,渲染时DataGridViewColumnHeaderCell,它会检查列是否存在IsHighlighted,然后以推送状态渲染列,以下是检测逻辑IsHighlighted

private bool IsHighlighted()
{
    return this.DataGridView.SelectionMode == DataGridViewSelectionMode.FullRowSelect && 
        this.DataGridView.CurrentCell != null && this.DataGridView.CurrentCell.Selected &&
        this.DataGridView.CurrentCell.OwningColumn == this.OwningColumn &&
        AccessibilityImprovements.Level2;
}
Run Code Online (Sandbox Code Playgroud)

正如您在上面的代码中看到的,有&& AccessibilityImprovements.Level2. 这意味着如果您关闭该功能,行为将被重置。

正如Taw的评论中也提到的,您可以关闭该功能。为此,您可以将此设置块添加到app.config文件中:

<runtime>
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=true" />
</runtime>
Run Code Online (Sandbox Code Playgroud)