(让我给你一些背景) 我目前正在设计一个应用程序,它应该根据一些数据生成一个可打印的A4页面。 当然,WPF(96像素/英寸)的独立于设备的像素在纸张世界中不是非常自然的测量单位。像毫米这样的东西会更合适。所以我拿出了我的计算器并达到了大约3.779的缩放系数。
事实证明,在ScaleTransform
中简单地拍打应该放在页面上的所有内容都会产生一个令人讨厌的副作用:字体大小也会缩放(当然)。然而,这不是我的意图。我希望12pt Arial像12pt一样渲染Arial会正常呈现。
还有其他方法更改坐标系而无需调用扩展或其他任何转换每个坐标,长度,厚度等的方法吗? - 要么 - 有没有办法即时映射字体大小,是DependencyProperties?通过包装所有纸质内容的自定义控件,可能吗?
答案 0 :(得分:18)
对于概述的要求,您根本不需要做任何特殊的事情,只需继续使用厘米作为WPF元素本身的度量单位(即没有任何变换) - WPF设备独立性的本质允许您以下内容:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="29.7cm" Width="21cm" FontSize="16pt">
<Grid>
<TextBlock Text="Sample" Height="1in" Width="1in" FontSize="12pt"
HorizontalAlignment="Center" VerticalAlignment="Center"
TextAlignment="Center"/>
</Grid>
</Window>
即:您将获得“cm
”中指定的A4窗口,其中包含“in
”中指定的居中方形TextBox和“pt
”中指定的字体。如果需要,所有这些都可以适当地扩展你可以应用的任何变换(例如通过用户视图端口的缩放滑块),尊重它们的相对大小,无论是否使用不同的单位指定(即随意混合使用)。 / p>
可用单位为px
(默认),in
,cm
和pt
,有关其规范的详细信息,请参阅FrameworkElement.Height。
答案 1 :(得分:2)
您还可以设置磅数(FontSize =“10pt”),英寸(FontSize =“10in”)或厘米(FontSize =“10cm”)。当然,实际大小取决于Windows的DPI设置以及此情况下显示器或打印机的DPI。
答案 2 :(得分:0)
只需set the font size到12 / 3.779 = 3.175
,不是吗?将它分配给包含的对象,它应该向所有孩子传播。