2

私は問題に直面しており、ここで専門家の助けをいただければ幸いです。電話の種類に基づいて適切なレイアウト/画像を使用できるように、画面の解像度を取得しようとしています。

私のプロジェクト タイプは 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;

MSDNの記事では、WP8 でこれを行う方法について説明していますが、コードを WP7 デバイスでも実行したいことに注意してください。

4

3 に答える 3

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


}
于 2013-03-11T23:14:43.617 に答える
2

リンク先の MSDN 記事に記載されているとおり: MSDN

Windows Phone 7 は 800 x 480 の 1 つの解像度のみをサポートしていました。プロジェクトは WP7 をターゲットにしているため、これは予想される動作です。Windows Phone 8 プロジェクトを開発している場合は、App.Current.Host.Content.ScaleFactor が異なる結果を返すはずです。

WP8 のさまざまな解像度に合わせてカスタマイズするには、おそらく WP8 プロジェクトを作成する必要があります。それでも WP7 デバイスをサポートしたい場合は、別の WP7 プロジェクトを作成する必要があります。

于 2013-03-08T23:50:15.137 に答える
1

App.Current.Host.Content.ScaleFactorリフレクションを使用してロードを試すことができます。

現在、wp8 環境はありませんが、同様のソリューションはこちらで確認できます。彼らはそれを使用してwp7.8でワイルドタイルを作成します

于 2013-03-09T17:10:02.900 に答える