Mono的WinForms如何确定系统字体大小?

时间:2010-12-21 23:56:00

标签: winforms mono autoscalemode

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

如果我可以增加我的字体大小并在我的 Ubuntu计算机上重现问题,我确信我可以解决问题(通过设置正确的AutoScaleMode和AutoScaleDimensions对于我的所有控件)。 但是当我尝试在系统中增加系统字体大小时 - >偏好 - >外观对话框,我的字体大小设置似乎对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)));

3 个答案:

答案 0 :(得分:1)

最好禁用AutoScaling:

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

答案 1 :(得分:0)

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

Mono Winforms使用的字体大小由Ubuntu中的Resolution(DPI)设置决定,可以通过转到System - >来访问它。偏好 - >外观 - >字体 - >的信息。

答案 2 :(得分:0)

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

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

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