如何在WPF中使用字体大小缩放表单?

时间:2012-03-04 17:07:38

标签: wpf user-interface fonts

如何在WPF中使用字体缩放表单?

  

即。什么是WPF相当于

this.Font = SystemFonts.IconTitleFont;

在WinForms中,如果您是一名优秀的开发人员,则表示您尊重用户的字体首选项。一个WinForm,起始于:

enter image description here

然后应用用户的字体首选项:

this.Font = new Font("Segoe Print", 11, GraphicsUnit.Point);

以及 比例 表单上的元素以适应新尺寸:

enter image description here

注意:

  • 形式更宽更高
  • 标签位于更下方,右侧
  • 标签更宽更高
  • 标签的文字未在右边或底边切掉
  • 按钮更宽更高
  • 但按钮位于更下方,右侧
  

注意:在WinForms中,您还可以使用以下行:

this.Font = SystemFonts.IconTitleFont;
     

WPF不支持Font,这就是为什么我提供了更清晰的选择。对于下面的示例。

类似的WPF表单开头为:

enter image description here

然后将用户的字体首选项应用于:

        this.FontFamily = new FontFamily("Segoe Print");
        this.FontSize = 14.666; //11pt = 14.66

并且表单上的元素不会缩放以适应新的大小:

enter image description here

注意:

  • 标签的位置未发生变化
  • 按钮的位置未更改
  • 表格不宽或更高(文字被剪掉)
  • 标签不宽(文字在右边切断)
  • 标签不高(沿底边切断文字)
  • 按钮不宽(文字被剪掉)

以下是相同尺寸的两个按钮的另一个示例:

的WinForms:

enter image description here

Windows Presentation Foundation:

enter image description here

奖金阅读

1 个答案:

答案 0 :(得分:11)

WPF不进行原始的基于字体的缩放,因为它是......好吧,原始的。您可以在自己的屏幕截图中看到它。

这是你的“WinForms,在更改字体之前”截图。看看“坐在日志上”之间有多少空间。和表格的右边缘。

这是你的“WinForms,更改字体后”截图。注意“缩放”后你有多少余量。

如果您没有留下所有额外空间,那么您的标签将被新字体切断。对于某些字体,即使你 留下所有额外的空间,它也会被切断。当我说WinForms的缩放是“原始的”时,这就是我的意思。 WinForms选择一个单一的比例来应用于所有内容,并且在不了解您的内容的情况下不选择该比例;它基于字体的平均值统计信息,一旦你开始讨论细节,它就会崩溃。

WPF并没有用原始的东西来阻碍你。它为您提供了一个非常强大的布局系统,在这里制作一个可以精美缩放的窗口是微不足道的。但相反,您选择使用硬编码尺寸来削弱布局系统。 停止。

硬编码大小有两个大问题:

  • 他们不适应不同的字体。你已经注意到了这一点。
  • 他们不适应不同的内容。 (如果您想要制作德语版的应用程序,并且德语文本不符合您的硬编码按钮大小,会发生什么?)

的硬编码大小不适应。 任何东西。你必须在WinForms中使用它们,因为这是所有WinForms支持的。但WPF为您提供了一个合适的布局系统,因此您不必(也不应该)使用任何原始布局系统。

所有你需要的是:

  • Window SizeToContent="WidthAndHeight"。这样,无论您使用何种字体或语言,窗口都将具有恰当的大小以容纳文本和按钮。
  • 由于您只有两个UI元素,而另一个位于另一个之上,因此您需要在StackPanel中添加Window
  • StackPanel内,您需要:
    • LabelTextBlock显示您的文字,文字位于ContentLabel)或TextTextBlock);和
    • Button HorizontalAlignment="Right"Content中的文字。
  • MarginStackPanelTextBlock上设置一些Button,以便根据自己的喜好设置内容。

就是这样。不要在任何内容上设置任何其他属性 - 尤其是而不是WidthHeight

现在,如果您更改字体,窗口和按钮仍将是完全正确的大小,并且不会切断您的文本。如果您将应用程序本地化为其他语言,则窗口和按钮的大小将完全合适,并且不会切断文本。停止战斗WPF,它会给你很好的结果。

如果您以后想要使布局更高级,可以考虑以下内容:

  • 如果您希望按钮更宽一些(在文本前后有更多的喘息空间),请尝试使用Padding,或设置MinWidthMinHeight 。 (如果您的按钮包含文本,请不要使用WidthHeight。如果您的按钮只包含图片,可能会考虑使用它们,但即便如此也是如此。)< / LI>
  • 如果您担心字体可能会使窗口变得太大而不再适合用户的屏幕,并且想要启用自动换行,那么请使用MaxWidthTextWrapping

WPF的布局系统非常强大。学习它。不要使用硬编码布局来对抗它,然后抱怨你的硬编码布局很糟糕。