我正在使用C#在WPF中开发一个地图控件.我正在使用画布控件,例如400 x 200,其指定的地图区域为例如2,000mx 1,000m.
地图的比例为: canvas_size_in_meters/real_size_in_meters.
我想找到canvas_size_in_meters.
canvas.ActualWidth给出DIU的宽度(设备独立单位).因此,400 DIU是400/96 = 4,17英寸,提供我的显示器的物理分辨率是96 dpi.
但是,使用标尺,我发现我的显示器的物理分辨率是87 dpi.(实际上只有少数显示器具有96个物理dpi)
DPI差异(10%)转换为屏幕上实际地图控制宽度的+ 10%差异.
如何以英寸为单位测量WPF控件的大小,无论屏幕分辨率和DPI设置如何?
如何以英寸为单位测量WPF控件的大小,无论屏幕分辨率和DPI设置如何?
这实际上是不可能的,因为要使它工作,WPF必须知道你的监视器的分辨率(就DPI而言).理论上听起来不错,但在实践中,Windows并不知道这些信息.这就是为什么Windows本身总是盲目地假设96dpi而不是更聪明.
即使有某种方式手动告诉它,或者你的特定显示器有一个自定义驱动程序确实将正确的信息传递给Windows,这对其他任何人的计算机都不起作用,因此Windows不会传递此信息任何应用程序.
你可以做的最好的是像谷歌地图一样绘制比例.你知道1 像素 == 1英里,所以你可以在你的地图上绘制一条50像素的线,标签上写着"这条线等于50英里"