1

我正在编写一个应用程序,我在其中使用两个图像集 - 白色和黑色。这取决于用户当前在整个操作系统中使用的背景。(我个人更喜欢黑色背景,但我知道绝望的人会使用白色)

所以。我创建了两个文件夹:/Images/Dark并且/Images/Light包含相同的文件名,唯一的区别是图像的颜色(深白色和浅黑色)。我的工作方式是这样的:每当我将图像源绑定到某个东西时,我都会检查我String appBackground;的设置为亮或暗,然后我创建路径的其余部分。像这样:

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

这工作得很好。问题是,当我想将图像绑定到其源的对象列表保存到文件时。这是因为我序列化了一个字符串,它被固定在一个路径中。所以,我可能有一个带有白色图标的项目列表,但是当我将背景更改为白色时 - 图标保持不变。

我的想法是,只保存最后的文件名部分。( this.name+".png") 然后以某种方式将其动态粘合到 appBackground 中。问题是:我真的不知道如何正确地做到这一点。

4

1 回答 1

1

如果您确实需要使用两组位图图像,请使用 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 回答