2016-02-03 28 views
2

在UWP应用程序中,我希望在桌面/大型平板电脑上运行应用程序顶部的命令栏,并在运行时将其放置在底部在移动/小型平板电脑上进行优化,以便单手使用。如何在UWP应用程序中获取物理对角线屏幕大小

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

问题是我找不到任何API给我这个信息。我看了DisplayInformation类,它给了我DPI信息,和ApplicationView.GetForCurrentView()。VisibleBounds,它给了我窗口大小,但我看不到如何获取或计算英寸的物理屏幕大小。

我确定这是一种常见的,推荐的模式,所以我必须错过明显的东西。有任何想法吗?

回答

3

注:需要建立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; 
    } 
+0

完美!我仍然瞄准10240,所以没有看到新的财产。如果用户在10586上,我将使用新的属性,否则我将默认为更大的屏幕布局。 –

+1

请不要将您的决定放在操作系统版本上!相反,你应该使用['IsPropertyPresent'](https://msdn.microsoft.com/en-us/library/windows/apps/windows.foundation.metadata.apiinformation.ispropertypresent.aspx)来检查操作系统是否构建有财产。 –

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

我不明白这是怎么考虑可靠的比例因子在低端或高端设备如何让您的数字可能靠不住。 –

+0

@ JerryNixon-MSFT的确,事实并非如此。 – tomab

相关问题