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

Ian*_*oyd 6 wpf user-interface fonts

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

即什么是WPF相当于

this.Font = SystemFonts.IconTitleFont;
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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

this.Font = new Font("Segoe Print", 11, GraphicsUnit.Point);
Run Code Online (Sandbox Code Playgroud)

并在表单元素比例,以适应新的大小:

在此输入图像描述

注意:

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

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

this.Font = SystemFonts.IconTitleFont;
Run Code Online (Sandbox Code Playgroud)

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

类似的WPF表格开头为:

在此输入图像描述

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

        this.FontFamily = new FontFamily("Segoe Print");
        this.FontSize = 14.666; //11pt = 14.66
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

注意:

  • 标签的位置没有改变
  • 按钮的位置没有改变
  • 表格不宽或更高(文字被切断)
  • 标签不是更宽(文字在右边被截断)
  • 标签不高(沿底边切断文字)
  • 按钮不是更宽(文本被切断)

以下是两个大小相同的按钮的另一个示例:

的WinForms:

在此输入图像描述

Windows Presentation Foundation:

在此输入图像描述

奖金阅读

Joe*_*ite 12

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

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

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

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

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

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

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

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

你需要的只是这个:

  • 一个WindowSizeToContent="WidthAndHeight".这样,无论您使用何种字体或语言,窗口都将具有恰当的大小以容纳文本和按钮.
  • 因为你只有两个UI元素,而另一个在另一个之上,所以你会把它放在你的StackPanel内部Window.
  • 在里面StackPanel,你需要:
    • A LabelTextBlock显示您的文本,文本在Content(Label)或Text(TextBlock)中; 和
    • 一个ButtonHorizontalAlignment="Right",并在文本Content.
  • 一些设置Margin上的S StackPanel,TextBlockButton空间的东西出来,以自己的喜好.

而已.不要在任何东西上设置任何其他属性 - 尤其不要WidthHeight.

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

如果您以后想要使您的布局更高级,您可以考虑以下事项:

  • 如果您希望按钮更宽一些(在文本前后有更多的呼吸空间),请尝试使用Padding,或设置MinWidthMinHeight.(不要使用Width或者Height如果您的按钮包含文本.如果您的按钮仅包含图像,您可以考虑使用它们,但可能不会.)
  • 如果您担心字体可能会使窗口变得太大以至于它不再适合用户的屏幕,并且想要启用自动换行,那么请使用MaxWidthTextWrapping.

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