如何在 WPF 中缩放带有字体的表单?
即 WPF 相当于什么
this.Font = SystemFonts.IconTitleFont;
在 WinForms 中,如果您是一名优秀的开发人员,您就会尊重用户的字体首选项。一个 WinForm 的开头是:
然后应用用户的字体首选项:
this.Font = new Font("Segoe Print", 11, GraphicsUnit.Point);
以及表单上的元素scale以适应新的尺寸:
Notice:
- 形式更宽更高
- 标签位于更下方和右侧
- 标签更宽更高
- 标签文本的右侧或底部边缘未被切断
- 按钮更宽更高
- 但按钮位于更下方、更右侧的位置
Note:在 WinForms 中,您还可以使用以下行:
this.Font = SystemFonts.IconTitleFont;
WPF 不支持Font
,这就是为什么我提供了更清晰的替代方案。对于下面的例子。
类似的 WPF 表单如下所示:
然后,您可以通过以下方式应用用户的字体首选项:
this.FontFamily = new FontFamily("Segoe Print");
this.FontSize = 14.666; //11pt = 14.66
以及表单上的元素don't缩放以适应新尺寸:
Notice:
- 标签的位置没有改变
- 按钮的位置没有改变
- 表格不更宽或更高(文本被截断)
- 标签不再变宽(文本在右侧被切断)
- 标签没有更高(沿着底部边缘剪掉文本)
- 按钮不再变宽(文本被截断)
这是两个按钮的另一个示例相同尺寸:
WinForms:
Windows 演示基础:
奖励阅读
- WPF:如何在对话框单位中指定单位? https://stackoverflow.com/questions/395195/wpf-how-to-specify-units-in-dialog-units
- 如何防止 WPF 使用 Windows 字体大小选项进行缩放? https://stackoverflow.com/questions/5857098/how-to-prevent-wpf-from-scaling-with-the-windows-font-size-options
- .ScaleControl 的 WPF 版本? http://WPF%20version%20of%20.ScaleControl?
WPF 不进行原始的基于字体的缩放,因为它……嗯,原始的。您可以在自己的屏幕截图中看到它。
这是“WinForms,更改字体之前”的屏幕截图。看看“坐在一根木头上”之间有多少空间。和表格的右边缘。
这是“WinForms,更改字体后”的屏幕截图。请注意“缩放”后您的余量减少了多少。
如果您没有留下所有额外空间,那么您的标签将被新字体截断。对于某些字体,即使您did留下所有额外的空间。这就是我说 WinForms 的缩放是“原始”的意思。 WinForms 选择一个单一的比例来应用于所有内容,并且选择该比例时不会对您的内容有任何了解;它基于average字体的统计数据,一旦你开始谈论细节,它就会崩溃。
WPF 不会用那些原始的东西来限制您。它为您提供了一个非常强大的布局系统,在其中制作一个可以完美缩放的窗口将是微不足道的。但相反,您选择通过使用硬编码尺寸来削弱该布局系统。Stop it.
硬编码大小有两个巨大的问题:
- 它们不适应不同的字体。你已经注意到这一点了。
- 他们不适应不同的内容。 (当您想要制作应用程序的德语版本,并且德语文本不适合您的硬编码按钮大小时,会发生什么?)
硬编码尺寸不适应。 To 任何事物。您必须在 WinForms 中使用它们,因为 WinForms 只支持这些。但是 WPF 为您提供了适当的布局系统,因此您不必(也不应该)使用任何粗糙的东西。
你所需要的只是这个:
- A
Window
with SizeToContent="WidthAndHeight"
。这样,无论您使用什么字体或语言,窗口的大小都将完全适合容纳文本和按钮。
- 由于您只有两个 UI 元素,并且一个位于另一个之上,因此您可以放置一个
StackPanel
在你的里面Window
.
- Inside the
StackPanel
, you need:
- A
Label
or TextBlock
显示您的文本,文本位于Content
(Label
) or Text
(TextBlock
); and
- A
Button
with HorizontalAlignment="Right"
,以及文本中Content
.
- 设置一些
Margin
是在StackPanel
, TextBlock
, and Button
根据您的喜好安排事物的空间。
就是这样。不要对任何东西设置任何其他属性--尤其 not Width
or Height
.
现在,如果您更改字体,窗口和按钮的大小仍然正确,并且不会截断您的文本。如果您将应用程序本地化为其他语言,窗口和按钮的大小将完全正确,并且不会截断您的文本。停止与 WPF 对抗,它会给您带来很好的结果。
如果您以后想让布局更高级,您可以考虑以下内容:
- 如果您希望按钮更宽一些(以便在文本前后有更多的呼吸空间),请尝试使用
Padding
,或设置一个MinWidth
and MinHeight
。 (不要使用Width
or Height
如果您的按钮包含文本。你might如果您的按钮仅包含图像,请考虑使用它们,但甚至可能不包含。)
- 如果您担心字体可能会使窗口太大而不再适合用户的屏幕,并且想要启用自动换行,请尝试使用
MaxWidth
and TextWrapping
.
WPF 的布局系统非常强大。学习它。不要通过使用硬编码布局来对抗它,然后抱怨你的硬编码布局很糟糕。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)