1

白と黒の 2 つの画像セットを使用するアプリを作成しています。OS全体でユーザーが現在使用しているバックグラウンドに依存します。(個人的には黒の背景が好きですが、絶望的な人は白を使うことを知っています)

そう。2 つのフォルダーを作成しまし/Images/Dark/Images/Light。同じファイル名が含まれていますが、唯一の違いは画像の色 (暗い場所では白、明るい場所では黒) です。私は次のように作業します: Image Source を何かにバインドするときはいつでも、String appBackground;どちらが Light または Dark に設定されているかをチェックしてから、残りのパスを作成します。このような:

this.imageSource = getIconPath((App.Current as App).appBackground) + this.name + ".png";

これはうまくいきます。問題は、たとえば、画像がそのソースをバインドするオブジェクトのリストをファイルに保存したい場合です。これは、1 つのパスに固定されている文字列をシリアル化するためです。そのため、白いアイコンのアイテムのリストがあるかもしれませんが、背景を白に変更してもアイコンは同じままです。

私の考えは、最後のファイル名部分だけを保存することでした。( this.name+".png") そして、どういうわけか、それを appBackground に動的に接着します。問題は、それを適切に行う方法が本当にわからないことです。

4

1 に答える 1

1

本当に2セットのビットマップ画像を使用する必要がある場合は、MVVMアプローチを使用します。ViewModelの画像ソースプロパティへの固定参照であり、現在のシステム背景に基づいて黒または白の画像を返します。
私はそれを次のように使用します:

public string SmsImg
{
    get { return AppHelper.IsBlackTheme ? "/Images/appbar.send.white.png" : "/Images/appbar.send.black.png"; }
}

およびIsBlackThemeの実装:

/// <summary>
/// Return true if pohone uses Black color theme.
/// </summary>
public static bool IsBlackTheme
{
    get
    {
        if (!isBlackTheme.HasValue)
        {
            SolidColorBrush bg = Application.Current.Resources["PhoneBackgroundBrush"] as SolidColorBrush;
            isBlackTheme = bg != null && bg.Color == Colors.Black;
        }
        return isBlackTheme.Value;
    }
}
private static bool? isBlackTheme;
于 2013-01-08T14:56:52.147 に答える