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

本文关键字:对角线 屏幕 获取 UWP 应用 | 更新日期: 2023-09-27 18:32:56

在 UWP 应用中,我想在台式机/大型平板电脑上运行时将命令栏放在应用的顶部,在移动/小型平板电脑上运行时将其放在底部,以便针对单手使用进行优化。

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

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

我确定这是一种常见的、推荐的模式,所以我一定错过了一些明显的东西。有什么想法吗?

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

注意:它需要内部版本 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;
    }

遇到了同样的问题,最后我选择仅使用窗口大小并根据它而不是物理屏幕大小更新我的应用程序布局。这是因为在大型桌面显示器上,如果应用程序是全屏的,我想要一个布局(例如,将命令栏放在顶部),如果应用程序缩小,就像在 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;
    }
}