如何在 WPF 中使用不同的坐标系? (仅缩放)

Posted

技术标签:

【中文标题】如何在 WPF 中使用不同的坐标系? (仅缩放)【英文标题】:How to use a different coordinate system in WPF? (scaling only) 【发布时间】:2010-10-02 22:33:52 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

对于概述的要求,您根本不需要做任何特别的事情,只需继续使用厘米作为 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”中指定一个居中方形文本框,在“pt”中指定一个字体。所有这些都将通过您可能额外应用的任何变换正确缩放,如果需要(例如,通过用户视口的缩放滑块),尊重它们的相对大小,而不管每个都使用不同的单位指定(即随意混合使用)。

可用的单位是px(默认)、incmpt,有关其规格的详细信息,请参见例如FrameworkElement.Height。

【讨论】:

谢谢,我不知道你在分配属性时可以指定单位。是的,这正是我想要的。【参考方案2】:

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

【讨论】:

谢谢,不知道。不过,我会接受 Steffen Opels 的回答,因为他提供了更详细的回答。【参考方案3】:

只是set the font size 到12 / 3.779 = 3.175,不是吗?将它分配给包含对象,它应该会向下渗透到所有子对象。

【讨论】:

我不想要的是在属性分配中引入这样的“转换”。即使它被一些自定义语法隐藏。

以上是关于如何在 WPF 中使用不同的坐标系? (仅缩放)的主要内容,如果未能解决你的问题,请参考以下文章

C# 通过point设置一个点的坐标,如何在WPF窗口中显示

裁剪 WPF 控件

canvas 平移&缩放

WPF 不同DPI下,窗口大小的处理

贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载

WPF学习第五章 理解WPF的布局