2016-02-03 30 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

相關問題