2013-03-08 77 views
2

我遇到問題,並希望得到專家的幫助。我正在嘗試獲取屏幕分辨率,以便我可以根據手機類型使用適當的佈局/圖像。如何在Windows Phone設備上獲取屏幕分辨率

我的項目類型是WP7。每當我在不同的WP7和WP8設備上運行代碼時,我每次都得到相同的分辨率(800 X 480)。預期的行爲是根據設備類型獲得不同的分辨率,例如WVGA = 800 x 480,WXGA = 1280 x 768,720p = 1280 x 720.

下面的所有3個代碼片段給了我相同的800×480分辨率,這不是預期的行爲。

Application.Current.RootVisual.RenderSize.Height + " x " + Application.Current.RootVisual.RenderSize.Width; 

(App.Current.RootVisual as FrameworkElement).ActualHeight + " x " + (App.Current.RootVisual as FrameworkElement).ActualWidth; 

App.Current.Host.Content.ActualHeight + " x " + App.Current.Host.Content.ActualWidth; 

有關如何做到這一點的WP8但請注意,我想代碼以及WP7設備上運行的MSDN文章會談。

回答

1

您可以嘗試使用反射加載App.Current.Host.Content.ScaleFactor

我現在沒有我的wp8環境,但是您可以看到類似的解決方案here。他們用它在wp7.8上創建wilde瓷磚

+0

感謝Anton爲您提供寶貴意見。這個接近爲我工作。 – 2013-03-11 22:23:18

2

由於MSDN文章中所述您鏈接到:MSDN

的Windows Phone 7僅支持單個分辨率,800 x 480的因爲你的項目的目標是WP7,這將是預期的行爲。如果您正在開發Windows Phone 8項目,那麼您應該會看到App.Current.Host.Content.ScaleFactor應該返回不同的結果。

您可能需要創建一個WP8項目來自定義WP8中的各種分辨率。如果你仍然想支持WP7設備,那麼你將需要創建一個單獨的WP7項目。

+0

感謝您的輸入。但是,我想避免創建多個項目。我希望使用單個Windows Phone 7(WP7)項目,並創建一個在WP7和WP8設備上運行的應用程序。我的觀察是WP7項目,無論運行什麼硬件,它總是會返回800x480的分辨率。 WP7 SDK中是否有其他API可以讓我讀取屏幕分辨率? – 2013-03-09 01:37:37

+0

基本上沒有,因爲在WP8上運行WP7應用程序時,應用程序總是被限制爲800x480。 – 2013-03-09 08:15:51

3

我最終編寫了以下基於代碼的Anton Sizikov上面的建議。它使用反射來讀取ScaleFactor屬性。如果7.1應用程序在WP8設備上運行,則反射將返回ScaleFactor屬性的值,並基於該設備的分辨率進行確定。

public enum Resolutions { WVGA, WXGA, HD720p }; 

public static class ResolutionHelper 
{ 
    static int? ScaleFactor; 

    static ResolutionHelper() 
    { 
     object scaleFactorValue = GetPropertyValue(App.Current.Host.Content, "ScaleFactor"); 
     if (scaleFactorValue != null) 
     { 
      ScaleFactor = Convert.ToInt32(scaleFactorValue); 
     } 
    } 

    private static bool IsWvga 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 100; 
     } 
    } 

    private static bool IsWxga 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 160; 
     } 
    } 

    private static bool Is720p 
    { 
     get 
     { 
      return ScaleFactor.HasValue && ScaleFactor.Value == 150; 
     } 
    } 

    public static Resolutions CurrentResolution 
    { 
     get 
     { 
      if (IsWxga) return Resolutions.WXGA; 
      else if (Is720p) return Resolutions.HD720p; 
      return Resolutions.WVGA; 
     } 
    } 

    private static object GetPropertyValue(object instance, string name) 
    { 
     try 
     { 
      return instance.GetType().GetProperty(name).GetValue(instance, null); 
     } 
     catch 
     { 
      // Exception will occur when app is running on WP7 devices as "ScaleFactor" property doesn't exist. Return null in that case. 
      return null; 
     } 
    } 


}