确定实际尺寸'视觉元素

时间:2014-07-08 20:15:14

标签: wpf

我正在创建一个控件,允许用户创建可以打印的可视元素。挑战在于用户可以改变视觉的大小,但需要知道他们正在创建的视觉的实际大小。换句话说,我有像素的大小,但我需要知道元素的实际大小是多少英寸。

例如,如果我创建一个96像素宽的按钮,我希望它长1英寸,但不同分辨率的不同显示器上按钮的大小不同。

这可能吗?

2 个答案:

答案 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

关于你的问题,这可能吗?是的肯定是! ;)