我正在创建一个控件,允许用户创建可以打印的可视元素。挑战在于用户可以改变视觉的大小,但需要知道他们正在创建的视觉的实际大小。换句话说,我有像素的大小,但我需要知道元素的实际大小是多少英寸。
例如,如果我创建一个96像素宽的按钮,我希望它长1英寸,但不同分辨率的不同显示器上按钮的大小不同。
这可能吗?
答案 0 :(得分:2)
如果您不知道显示器的实际PPI(例如使用投影仪),则无法进行此操作,但这是尝试从96x96设备独立像素的矩形计算它:
var ppi = 220; //The PPI on my monitor.
var devicePixels = GetElementPixelSize(MyRectangle); //Convert WPF pixels to device pixels
var widthInInches = devicePixels.Width / ppi; //Convert pixels to inches based on the PPI.
使用此代码(来自How do I convert a WPF size to physical pixels?)
public Size GetElementPixelSize(UIElement element)
{
Matrix transformToDevice;
var source = PresentationSource.FromVisual(element);
if (source != null)
transformToDevice = source.CompositionTarget.TransformToDevice;
else
using (var source2 = new HwndSource(new HwndSourceParameters()))
transformToDevice = source2.CompositionTarget.TransformToDevice;
if (element.DesiredSize == new Size())
element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
return (Size)transformToDevice.Transform((Vector)element.DesiredSize);
}
在我的情况下,96转换为144px。 144/220是0.65656565英寸。
要获得ppi,请查看以下问题:acquire monitor physical dimension
这不是一项容易的任务,并不能保证仅仅因为它呈现一定的尺寸,它也会在打印时看起来那样。毕竟,打印机还具有DPI和纸张尺寸。
答案 1 :(得分:-2)
你真的应该在WPF, DPI and Scaling上谷歌,因为WPF的缩放系统有一些重要的特征。在搜索中,您会找到关于该主题的this site for a first read。
关于你的问题,这可能吗?是的肯定是! ;)