【问题标题】:How to use system font settings for a Windows C# app如何为 Windows C# 应用程序使用系统字体设置
【发布时间】:2011-05-05 16:44:30
【问题描述】:

对于 Windows 应用程序 (C#),是否可以调整整个应用程序(包括所有表单)以使用系统字体设置来调整大小而不是使用固定大小?

这适用于在其机器上设置了较大字体大小的视力障碍用户。应用程序是否可以根据用户的字体调整字体。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    如果您希望您的应用程序按系统字体缩放,您应该将所有表单的AutoScaleMode 属性设置为值AutoScaleMode.Font,如果您希望它按Windows DPI 设置缩放,则应设置为AutoScaleMode.Dpi

    在这里您可以找到更多信息 - http://msdn.microsoft.com/en-us/library/ms229605.aspx

    【讨论】:

    • 感谢您的回复。我检查了代码,发现所有表单的 AutoScaleMode 属性都已设置为 AutoScale.Font。为了进行测试,我将机器上的字体大小更改为 Extra Large 并发现只有我的应用程序的标题栏会缩放以反映此更改。表单上的所有其他内容(面板、按钮、文本等)仍然是相同的大小。任何想法如何使这项工作?
    • 您应该将此属性的值设置为 AutoScaleMode.Dpi。在 Windows 7 显示设置中,甚至还有“设置自定义文本大小 (DPI)”选项。我认为它在旧窗口中是相同的,但他们没有足够清楚地表明 DPI 负责相同值字体的更大尺寸。您可以这样看 - 如果您将字体大小设置为 12,那么在较高 DPI(例如 125%)上相同的大小会更高(15)。通过将 AutoScaleMode 设置为 Font,您在较高 DPI 屏幕上的程序将按比例缩小,使其看起来像 12。如果是 DPI,它将保持 12(或在较高 DPI 中为 15)。
    • 感谢伊万的帮助。该应用程序现在可以很好地处理字体缩放。但是,为了使其可访问性投诉,如果用户设置了高对比度设置,我需要使其工作。现在,如果我设置高对比度设置(控制面板 - 辅助功能 - 显示),表单上的大部分文本都会消失,并且 UI 看起来很难看。有没有办法可以在我们的应用程序中反映高对比度的变化?感谢您的帮助!
    • 对于这个问题没有开箱即用的解决方案。但它可以通过使用表单的 AccessibilityObject 属性来处理。有关更多信息,请查看 MSDN 文档中的示例 - msdn.microsoft.com/en-us/library/…
    【解决方案2】:

    在表单的构造函数中(在调用InitializeComponent() 之前),我会尝试将表单的Font 属性设置为等于System.Drawing.SystemFonts.DefaultFont。如果您的控件(例如:文本框)未指定特定字体,那么我相信它们会从其父容器(即表单)继承其字体属性。

    System.Drawing.SystemFonts 类中还有其他更具体的系统字体(如 Caption 字体的默认设置)。您可能还想进一步调查。

    【讨论】:

    • SystemFonts.DefaultFont 工作正常,但我不建议在表单初始化之前调用它。它会导致控制图纸失真。当我在表单加载下使用它时,它对我有用..
    【解决方案3】:
    // Get dpi width
    float x = this.CreateGraphics().DpiX;
    
    // if screen is width
    if (x == 120)
        // Get big image from Resources
        this.BackgroundImage = Properties.Resources.BigImage;
    
    else if (x==96)
    {
        // Get small image from Resources
        this.BackgroundImage = Properties.Resources.loading49;
    
        this.BackColor = ColorTranslator.FromHtml("#E6E6E6");
        this.button2.Size = new Size(85, 30);
        this.button1.Size = new Size(75, 24);
        this.textBox1.Size = new Size(150, 40);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多