【问题标题】:How does Mono's WinForms determine the system font size?Mono 的 WinForms 如何确定系统字体大小?
【发布时间】:2011-05-29 03:37:40
【问题描述】:

我为 Linux 编写了一个 C# 应用程序,它由 mono (gmcs) 编译并使用 WinForms 2.0 库呈现用户界面。我的应用程序在我的计算机上看起来不错,但我的一个客户正在使用具有大字体大小的计算机(Fedora/OLPC),并且自动缩放并不完全适合他(文本变大而用户控制大小保持不变)。

如果我可以增加 my 字体大小并在 my Ubuntu 计算机上重现该问题,我确信我可以解决该问题(通过设置正确的 AutoScaleMode 和 AutoScaleDimensions对于我所有的控件)。 但是当我尝试在 System -> Preferences -> Appearance 对话框中增加系统字体大小时,我的字体大小设置似乎对 Winforms 呈现的 UI 没有任何影响。

那么,Mono WinForms 是如何确定系统字体大小的? 如何让它在我的电脑上选择更大的字体?

我使用的是 Ubuntu 9.10 和 Mono winforms 2.4.2.3+dfsg-2。

以防万一,我的应用程序是从 Visual Studio 移植的,因此控件上的字体设置在 .Designer.cs 文件中,如下所示:

label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

【问题讨论】:

    标签: winforms mono autoscalemode


    【解决方案1】:

    更常见的答案是:根据我的实验,Mono 根据Xft.dpi 值计算实际字体大小。可以使用xrdb -query Xft.dpi获取,也可以在运行时使用echo Xft.dpi: VALUE | xrdb动态设置。

    请注意,某些应用程序在更改值后会立即更新其 UI,而其他应用程序(包括 Mono)仅在启动时检查它。

    David Grayson 的回答中提到的 Ubuntu 的 System -> Preferences -> Appearance -> Fonts -> Details 设置很可能会更改相同的值。

    【讨论】:

      【解决方案2】:

      (Hans Passant 给出了这个问题的正确答案,但是他的答案已经不在了,所以我会回答我自己的问题。)

      Mono Winforms 使用的字体大小由 Ubuntu 中的分辨率 (DPI) 设置决定,可以通过转到系统 -> 首选项 -> 外观 -> 字体 -> 详细信息来访问。

      【讨论】:

        【解决方案3】:

        您最好禁用 AutoScaling:

        http://www.mono-project.com/FAQ:_Winforms

        【讨论】:

          猜你喜欢
          • 2023-04-05
          • 2015-10-17
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 2010-09-17
          • 2011-02-16
          • 2020-07-19
          • 1970-01-01
          相关资源
          最近更新 更多