Ian*_*oyd 6 wpf user-interface fonts
如何在WPF中使用字体缩放表单?
即什么是WPF相当于
Run Code Online (Sandbox Code Playgroud)this.Font = SystemFonts.IconTitleFont;
在WinForms中,如果您是一名优秀的开发人员,则尊重用户的字体首选项.一个WinForm,起始于:
然后,您应用用户的字体首选项:
this.Font = new Font("Segoe Print", 11, GraphicsUnit.Point);
Run Code Online (Sandbox Code Playgroud)
并在表单元素比例,以适应新的大小:
注意:
注意:在WinForms中,您还可以使用以下行:
Run Code Online (Sandbox Code Playgroud)this.Font = SystemFonts.IconTitleFont;
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为您提供了一个合适的布局系统,因此您不必(也不应该)使用任何粗糙的东西.
你需要的只是这个:
Window
与SizeToContent="WidthAndHeight"
.这样,无论您使用何种字体或语言,窗口都将具有恰当的大小以容纳文本和按钮.StackPanel
内部Window
.StackPanel
,你需要:
Label
或TextBlock
显示您的文本,文本在Content
(Label
)或Text
(TextBlock
)中; 和Button
用HorizontalAlignment="Right"
,并在文本Content
.Margin
上的S StackPanel
,TextBlock
和Button
空间的东西出来,以自己的喜好.而已.不要在任何东西上设置任何其他属性 - 尤其不要Width
或Height
.
现在,如果您更改字体,窗口和按钮仍将是正确的大小,并且不会切断您的文本.如果您将应用程序本地化为其他语言,则窗口和按钮的大小将完全合适,并且不会切断文本.停止战斗WPF,它会给你很好的结果.
如果您以后想要使您的布局更高级,您可以考虑以下事项:
Padding
,或设置MinWidth
和MinHeight
.(不要使用Width
或者Height
如果您的按钮包含文本.如果您的按钮仅包含图像,您可以考虑使用它们,但可能不会.)MaxWidth
和TextWrapping
.WPF的布局系统非常强大.学习它.不要使用硬编码布局来对抗它,然后抱怨你的硬编码布局太糟糕了.