【问题标题】:C# WinForms - How to prevent custom control from inherit the form font styling?C# WinForms - 如何防止自定义控件继承表单字体样式?
【发布时间】:2021-07-19 10:00:32
【问题描述】:

我已经搜索了几天,但没有任何效果。

我正在开发一个使用名为 MaterialSkin 的 WinForm 自定义样式的项目,github 页面是 https://github.com/IgnaceMaes/MaterialSkin

基本上要使用它,我只需将继承的类从 public partial class FormMain : Form 更改为 public partial class FormMain : MaterialForm,这会将 Material Design 应用于我的项目。

问题是所有控件都受到此更改的影响。 如果我添加标签并更改字体,则视觉更改仅适用于设计模式,当我运行项目时,会应用 MaterialSkin 字体(Roboto)。

现在我想使用来自这个 repo https://github.com/falahati/CircularProgressBar 的自定义控件 CircularProgressBar

问题是一样的,我想要一个大数字在圆心,它在设计模式下工作。 当我运行项目时,字体大小减小到 8,5。

我已经尝试在 Form_Load 事件和 OnPaint 中手动将新字体设置为 CircularProgressBar,但没有任何效果。

关于我缺少什么的任何想法?

编辑

正如@Jimi 所建议的,我在下面发布了最小的代码来重现我面临的问题。

  1. 创建了一个全新的项目Windows Forms App (.NET Framework) v4.6.1
  2. 我已经搜索并安装了 leocb, IgnaceMaes 的 MaterialSkin.2 v2.1.3 (not the latest)
  3. 我已经搜索并安装了 Soroush Falahati 的 CircularProgressBar v2.8.0.16
  4. 我已打开 Form1.cs 并进行了必要的更改以加载 MaterialSkin
  5. 我已将CircularProgressBarcontrol 添加到Form1,构建并运行。
// Form1.cs
using MaterialSkin;
using MaterialSkin.Controls;

namespace SimpleTestProject
{
    public partial class Form1 : MaterialForm
    {
        private readonly MaterialSkinManager materialSkinManager = null;

        public Form1()
        {
            InitializeComponent();

            materialSkinManager = MaterialSkinManager.Instance;
            materialSkinManager.AddFormToManage(this);
            materialSkinManager.Theme = MaterialSkinManager.Themes.LIGHT;
        }
    }
}

结果

【问题讨论】:

  • 在设计器中设置不同的字体。先试试Segoe UI。 -- 在控件中显式设置字体时,字体不会被继承。但字体必须与 GDI+ 渲染兼容。
  • 这就是问题所在,我已经尝试了几乎所有的字体选项,没有一个有用,甚至在运行时都没有改变,只有设计模式。 Segoe UI 也不起作用。我同意,如果明确设置字体,则字体不应该被继承,但无论我做什么,它都会被继承。如果我可以改变大小,它将解决 95% 的问题
  • 那么可能与您的设置有关,因为这不是MaterialFormMaterialTabControl 的默认行为。我不使用 CircularProgressBar 控件。尝试使用另一个控件。
  • 好的,这是 MaterialSkin.2 Manager 中的一个设置,EnforceBackcolorOnAllComponents 默认设置为true。您需要将其设置为false在调用materialSkinManager.AddFormToManage(this); 之前,设置materialSkinManager.EnforceBackcolorOnAllComponents = false; -- 保留readonly 字段声明。
  • 您好,我是materialSkin.2 Jimi 上面的回答是正确的。创建强制背景颜色是为了解决人们混合材质皮肤和默认窗体控件的背景颜色问题。禁用此选项将使 lib 停止与不属于材质皮肤的其他组件混淆。但是,禁用它可能会导致混合控件之间的背景颜色不一致。

标签: c# inheritance styles font-size


【解决方案1】:

正如@Jimi 和@Leo 所建议的,要避免将MaterialSkin 样式应用于所有控件,只需禁用名为EnforceBackcolorOnAllComponentsMaterialSkinManager 属性

materialSkinManager.EnforceBackcolorOnAllComponents = false;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多