C# 获取以毫米为单位的控件大小

C# 获取以毫米为单位的控件大小,c#,wpf,size,dpi,C#,Wpf,Size,Dpi,我正在用C#(WPF)编程的应用程序中显示地图。有没有办法将控件的大小从像素转换为厘米 我尝试了以下代码: PresentationSource source = PresentationSource.FromVisual(myControl); double dpiX = 96.0f * source.CompositionTarget.TransformToDevice.M11; double sizeInCentiMeter = myControl.Width / dpiX * 2.

我正在用C#(WPF)编程的应用程序中显示地图。有没有办法将
控件的大小从像素转换为厘米

我尝试了以下代码:

PresentationSource source = PresentationSource.FromVisual(myControl);

double dpiX = 96.0f * source.CompositionTarget.TransformToDevice.M11; 

double sizeInCentiMeter = myControl.Width / dpiX * 2.54;
但我得到的是误差百分比。我的意思是,实际尺寸总是比计算尺寸大0.25左右


您可以假设dpi=96。

dpi实际上是96吗?到目前为止,这似乎是最有可能的误差来源。有没有办法尽可能精确地计算出来?这完全取决于显示设备。不幸的是,显示设备似乎无法向Windows报告其物理尺寸,因此Windows无法准确计算设备的dpi。@JasonWatkins是对的。在液晶显示器的简单例子中,报告物理尺寸是有意义的,但想想投影仪:它将如何计算其dpi?这取决于投影仪与屏幕的距离。你能做的最好的事情就是询问用户。控制尺寸已经以英寸为单位,单位为1/96“,而不是像素。使用DPI没有意义,只需乘以25.4就可以得到mm。这确实需要问你所谓的“真实尺寸”“。不要在显示器上使用标尺,显示的尺寸只是近似值。显示器DPI不一定要精确,感知到的DPI取决于您坐在离显示器多远的位置。