【问题标题】:.NET ToolStripMenuItem check tick not visible in high contrast theme.NET ToolStripMenuItem 检查勾号在高对比度主题中不可见
【发布时间】:2020-07-14 23:12:12
【问题描述】:

由于可访问性原因,我们软件的少数用户在 Windows 中使用高对比度主题,并且这些用户无法在 ToolStripMenuItem 中看到选中状态,因为选中刻度与背景颜色相同:

这是在普通的 Windows 主题中:

这是高对比度的 Windows 主题:

有没有办法在不使用自定义刻度图像作为解决方法的情况下使检查状态在高对比度主题中可见?

这是 .NET 控件中的故意还是错误?因为正如我所见,所有默认的 .NET 控件都正确支持高对比度主题,除了这个。

【问题讨论】:

    标签: c# .net controls accessibility


    【解决方案1】:

    我找不到如何正确渲染检查,尤其是当有图像时。但是找到了解决方法,这对于普通主题中的图像检查状态也很方便,因为当每个项目中有图像时检查不容易看到:

    public class ToolStripCheckedBoldRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
        {
            if (e.Item is ToolStripMenuItem && ((ToolStripMenuItem)e.Item).Checked)
            {
                e.TextFont = new Font(e.Item.Font, FontStyle.Bold);
            }
    
            base.OnRenderItemText(e);
        }
    }
    

    tsMain.Renderer = new ToolStripCheckedBoldRenderer();

    此渲染器使选中的项目变为粗体:

    所以这个解决方案总比没有好,但仍然需要更好的解决方案。

    【讨论】:

      【解决方案2】:

      这是一个 .NET 错误,已在 .NET 版本 4.7.2 上修复,如下所述: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/retargeting/4.6.2-4.7.2#accessibility-improvements-in-windows-forms-controls

      引用:

      ToolStripMenuItem 控件的 Checked 属性设置为 true 现在以对比系统颜色呈现关联的复选标记。以前复选标记颜色对比度不够,在高对比度主题中不可见。注意:Windows 10 已更改某些高对比度系统颜色的值。 Windows 窗体框架基于 Win32 框架。为获得最佳体验,请在最新版本的 Windows 上运行并通过在测试应用程序中添加 app.manifest 文件并取消注释以下代码来选择加入最新的操作系统更改:

      <!-- Windows 10 --> 
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多