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

C# 如何在UWP应用程序中获取物理对角线屏幕大小,c#,uwp,C#,Uwp,在UWP应用程序中,当在桌面/大型平板电脑上运行时,我想在应用程序顶部放置一个命令栏,当在移动/小型平板电脑上运行时,我想在底部放置一个命令栏,以便优化单手使用 我还想根据屏幕/窗口大小做出所有运行时布局决策,并忽略设备系列。我想做的是检测屏幕大小是否小于7英寸,如果小于7英寸,则移动命令栏 问题是我找不到任何API提供这些信息。我已经查看了DisplayInformation类,它为我提供了DPI信息,以及ApplicationView.GetForCurrentView().VisibleB

在UWP应用程序中,当在桌面/大型平板电脑上运行时,我想在应用程序顶部放置一个命令栏,当在移动/小型平板电脑上运行时,我想在底部放置一个命令栏,以便优化单手使用

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

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


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

我遇到了同样的问题,最后我选择只使用窗口大小,并根据窗口大小而不是实际屏幕大小更新我的应用程序布局。这是因为在大型桌面显示器上,如果应用程序是全屏的,我需要一种布局(例如,将命令栏放在顶部),如果应用程序变窄,如在windows phone 10上,我需要另一种布局(例如,将命令栏放在底部)

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

有一个
枚举

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;
    }
}

注意:它需要构建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;
    }
public static bool的屏幕宽度小于7英寸()
{
//获取集成显示器的对角线大小
double ActualSizeInches=double.MaxValue;
if(DisplayInformation.GetForCurrentView().diagonalSizeInnches.HasValue)
ActualSizeInches=DisplayInformation.GetForCurrentView().DiagonalSizeInches.Value;

//如果对角线大小是完美的!我仍然以10240为目标,因此没有看到新属性。如果用户在10586上,我将使用新属性,否则我将默认为更大的屏幕布局。请不要根据操作系统版本做出决定!相反,您应该使用检查您所使用的操作系统版本是否具有该属性。我不知道如何使用该属性考虑到低端或高端设备上的比例因子会使您的数字可能不稳定,它是可靠的。@JerryNixon MSFT事实上,它不是。