如何在UWP应用程序中获取物理对角屏幕大小

时间:2016-02-03 09:36:01

标签: c# uwp

在UWP应用程序中,我想在桌面/大型平板电脑上运行时在应用程序顶部放置一个命令栏,并在移动/小型平板电脑上运行时将其放在底部,以便针对一个平板电脑进行优化递交使用。

我还希望根据屏幕/窗口大小做出所有运行时布局决策,并忽略设备系列。我想做的是检测屏幕尺寸是否小于7“ - 如果是,则移动命令栏。

问题是我找不到任何能够提供此信息的API。我查看了DisplayInformation类,它给了我DPI信息,还有ApplicationView.GetForCurrentView()。VisibleBounds,它给了我窗口大小,但是我看不出如何以英寸为单位获取或计算物理屏幕大小。 / p>

我确信这是一个常见的,推荐的模式,所以我必须遗漏一些明显的东西。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

注意:它需要Build 10586或更高版本。将在构建10240上抛出异常。

    public static bool IsScreenSizeLessThan7inches()
    {
        //Get the diagonal size of the integrated display
        double actualSizeInInches = Double.MaxValue;
        if (DisplayInformation.GetForCurrentView().DiagonalSizeInInches.HasValue)
            actualSizeInInches = DisplayInformation.GetForCurrentView().DiagonalSizeInInches.Value;

        //If the diagonal size is <7" use the OneHanded optimized view
        if (actualSizeInInches > 0 && actualSizeInInches <7)
            return true;
        else
            return false;
    }

答案 1 :(得分:0)

我遇到了同样的问题,最后我选择只使用窗口大小并根据它而不是物理屏幕大小更新我的应用布局。这是因为在大型桌面显示器上,如果应用程序是全屏我想要一个布局(例如将命令栏放在顶部),如果应用程序缩小,就像在Windows Phone 10上一样,我想要其他布局(例如放置底部的命令栏。)

此解决方案更适合,因为它可以在同一屏幕上处理不同大小的应用程序。

有一个enum

public enum LayoutType
{
    Overlay,
    Parallel
}

然后有一个订阅事件:

window.SizeChanged += LayoutRootSizeChanged;

private void LayoutRootSizeChanged(object sender, WindowSizeChangedEventArgs e)
{
    var height = e.Size.Height;
    var width = e.Size.Width;
    if (ApplicationView.GetForCurrentView().Orientation == ApplicationViewOrientation.Landscape)
    {
       LayoutType = width > 800 ? LayoutType.Parallel : LayoutType.Overlay;
    }
    else
    {
        LayoutType = LayoutType.Overlay;
    }
}