如何在 DrawingVisual 中以毫米为单位而不是以像素为单位绘制内容?

How to draw something in DrawingVisual with millimeter unit instead of pixels?

我想在 System.Windows.Media.DrawingVisual 中画一些东西,但我需要以毫米为单位画细线。我该怎么做?

在 WPF 中,您甚至无法在不付出额外努力的情况下以像素为单位绘制内容。 WPF 使用 "device independent units",其中每个单位为 1/96 英寸。即使这只是理论上的关系,因为它取决于显示设备正确报告其分辨率,而这又取决于显示器、其配置以及用户设置的内容,例如在 "large fonts" 设置中(即在屏幕分辨率设置中,单击显示 "Make text and other items larger or smaller" 的 link)。

所有这些都会影响 WPF 对可用显示分辨率信息的解释,进而影响 WPF 选择呈现其 "device independent" 1/96 英寸单位的方式。

最重要的是,Sheridan 提供的 link 评论确实是最接近以毫米显示的,除非 很多 的额外工作和来自用户。通过按提供的 factor 值(即 96/ 25.4…缩放输入单位(以毫米为单位),在表达式中,您可以看到 25.4 从毫米转换为英寸,然后 96 将英寸转换为 1/96 英寸),您可以将毫米转换为 WPF 本机使用的 96 dpi 单位。

假设显示器配置正确(一个乐观的假设,但它确实发生了 :)),这将根据您所需的基于毫米的尺寸在屏幕上相当准确地显示。


请注意,您可以通过对呈现的 UI 元素使用变换来完成此缩放。最简单的做法是设置最外层容器对象的 LayoutTransform 属性,您希望在其中进行基于毫米的渲染。然后您可以使用毫米值的位置和大小在该容器中布置您的对象,WPF 将使用转换以您想要的比例呈现容器和呈现的对象。