2013-03-08 2 views
2

나는 문제가있어 전문가의 도움을 받아 주셔서 감사합니다. 휴대 전화 종류에 따라 적절한 레이아웃/이미지를 사용할 수 있도록 화면 해상도를 얻으려고합니다.Windows Phone 장치에서 화면 해상도를 얻는 방법

내 프로젝트 유형은 WP7입니다. 다른 WP7 및 WP8 장치에서 코드를 실행할 때마다 매번 동일한 해상도 (800 X 480)를 얻습니다. 예상되는 동작은 기기 유형에 따라 다른 해상도를 얻는 것입니다. WVGA = 800 x 480, WXGA = 1280 x 768, 720p = 1280 x 720.

아래의 3 가지 코드 스 니펫은 800 x 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 문서 회담. MSDN 문서에 명시된 바와 같이

답변

1

리플렉션을 사용하여 App.Current.Host.Content.ScaleFactor을로드 할 수 있습니다.

지금 내 wp8 환경이 없지만 비슷한 해결책을 볼 수 있습니다. here. 그들은 wp7.8에 wilde 타일을 만들 때 사용합니다.

+0

귀중한 아이디어로 Anton에게 감사드립니다. 이 접근은 나를 위해 일했습니다. –

2

당신이에 연결 : 프로젝트가 WP7을 목표로하고 있기 때문에 MSDN

윈도우 폰 7은, X 480 (800)를 하나의 해상도를 지원, 그것은 예상되는 동작 할 것이다. Windows Phone 8 프로젝트를 개발하는 경우 App.Current.Host.Content.ScaleFactor가 다른 결과를 반환해야합니다.

WP8의 다양한 해상도를 사용자 지정하려면 WP8 프로젝트를 만들어야 할 것입니다. 그래도 WP7 장치를 지원하려면 별도의 WP7 프로젝트를 만들어야합니다.

+0

입력 해 주셔서 감사합니다. 그러나 여러 프로젝트를 만드는 것을 피하고 싶습니다. 단일 WP7 (Windows Phone 7) 프로젝트를 사용하고 WP7 및 WP8 장치에서 실행되는 응용 프로그램을 만들려고했습니다. 내 관찰은 WP7 프로젝트를위한 것이며, 어떤 하드웨어가 실행 되더라도 항상 800x480의 해상도를 반환합니다. WP7 SDK에 화면 해상도를 읽을 수있는 다른 API가 있습니까? –

+0

기본적으로 WP8에서 WP7 앱을 실행할 때 앱은 항상 800x480으로 제한됩니다. –

3

위의 코드를 기반으로 Anton Sizikov 권장 사항을 작성했습니다. 리플렉션을 사용하여 ScaleFactor 속성을 읽습니다. 7.1 응용 프로그램이 WP8 장치에서 실행 중이면 Reflection에서 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; 
     } 
    } 


} 
관련 문제