8

(让我给你一些背景信息)我目前正在设计一个应用程序,它应该根据一些数据生成一个可打印的 A4 页面。当然,WPF 的设备无关像素(96 像素/英寸)在纸质世界中并不是一个非常自然的度量单位。像毫米这样的东西会更合适。所以我拿出我的计算器,得到一个大约 3.779 的比例因子。

事实证明,简单地将应该在页面上显示的所有内容都放在 aScaleTransform中会产生一个令人讨厌的副作用:字体大小也会(自然地)缩放。然而,这不是我想要的。我希望 12pt Arial 像 12pt Arial 正常渲染一样渲染。

有没有其他方法可以更改坐标系,而无需调用扩展或任何其他方法来转换每个坐标、长度、厚度等?- 或 - 有没有办法即时映射字体大小,即DependencyProperties?通过一个包含所有纸张内容的自定义控件,也许吧?

4

3 回答 3

19

对于概述的要求,您根本不需要做任何特别的事情,只需继续使用厘米作为 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>

即:您将获得一个在“ ”中指定的 A4 窗口,其中在“ cm”中指定了一个居中的方形文本框,在“ in”中指定了一个字体pt。如果需要,所有这些都将通过您可能额外应用的任何变换正确缩放(例如,通过用户视口的缩放滑块),尊重它们的相对大小,而不管每个都使用不同的单位指定(即随意混合使用)。

Available units are px (default), in, cm and pt, see for example FrameworkElement.Height for details on their specification.

于 2009-07-17T15:51:08.353 回答
2

您还可以以磅 (FontSize="10pt")、英寸 (FontSize="10in") 或厘米 (FontSize="10cm") 为单位设置大小。当然,在这种情况下,实际大小取决于 Windows 的 DPI 设置以及显示器或打印机的 DPI。

于 2009-07-17T11:29:10.913 回答
0

只需将字体大小设置12 / 3.779 = 3.175,不是吗?将它分配给包含对象,它应该会向下渗透到所有子对象。

于 2009-07-17T11:24:31.250 回答