C# 如何在DrawingVisual中使用毫米单位而不是像素来绘制某些东西?

C# 如何在DrawingVisual中使用毫米单位而不是像素来绘制某些东西?,c#,wpf,printing,drawingvisual,C#,Wpf,Printing,Drawingvisual,我试图在System.Windows.Media.DrawingVisual中绘制一些东西,但我需要以毫米为单位绘制一些东西。我怎样才能做到这一点呢?在WPF中,如果不付出额外的努力,你甚至不能以像素为单位绘制东西。WPF使用“设备独立单元”,其中每个单元为1/96英寸。即使这只是一个理论关系,因为它取决于显示设备是否正确报告其分辨率,而分辨率又取决于显示器、其配置以及用户设置的内容,例如在“大字体”设置中(即在屏幕分辨率设置中,单击显示的链接“使文本和其他项目变大或变小”) 所有这些都会影响W

我试图在System.Windows.Media.DrawingVisual中绘制一些东西,但我需要以毫米为单位绘制一些东西。我怎样才能做到这一点呢?

在WPF中,如果不付出额外的努力,你甚至不能以像素为单位绘制东西。WPF使用“设备独立单元”,其中每个单元为1/96英寸。即使这只是一个理论关系,因为它取决于显示设备是否正确报告其分辨率,而分辨率又取决于显示器、其配置以及用户设置的内容,例如在“大字体”设置中(即在屏幕分辨率设置中,单击显示的链接“使文本和其他项目变大或变小”)

所有这些都会影响WPF对可用显示分辨率信息的解释,进而影响WPF选择渲染其“设备独立”1/96英寸单位的方式

最重要的是,Sheridan提供的链接评论员实际上是最接近以毫米为单位显示的链接评论员,这就排除了用户的大量额外工作和帮助(即,
96/25.4
…在表达式中,您可以看到
25.4
从毫米转换为英寸,然后是将英寸转换为1/96英寸的
96
),您可以将毫米转换为WPF本机使用的96 dpi单位

假设显示器配置正确(一个乐观的假设,但它确实发生了:),这将根据所需的毫米尺寸在屏幕上产生合理准确的显示


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