如何使用XNA获得Windows Phone 7主题颜色

时间:2012-02-21 16:25:34

标签: c# xna windows-phone-7.1 windows-phone-7

我一直在尝试使用http://geekswithblogs.net/mikebmcl/archive/2010/09/16/using-wp7-themes-in-your-xna-game.aspx提供的指南,但我找不到应用程序名称,也似乎无法找到SolidColorBrush的替代品。

遗憾的是网上没有库或易于使用的代码,以便在Windows手机上以XNA方式获取磁贴颜色,即使它在Silverlight中很简单。

任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

你可以用更短的方式获得手机上的主题(黑暗/浅色)(也适用于XNA):

Visibility darkBackgroundVisibility = (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"];

if(darkBackgroundVisibility == Visibility.Visible)
    //Theme is Dark
else
    //Theme is Light

要获得AccentColor,您需要更多代码(我从MSDN上的这篇文章中得到它:How to: Apply Theme Resources for Windows Phone)。为了便于阅读,我缩短了switch语句中的代码并将其放入方法中。我也在XNA应用程序中测试了这个,这很好用! :)

var currentAccentColorHex = (System.Windows.Media.Color)Application.Current.Resources["PhoneAccentColor"];
string currentAccentColor = ColorNameFromHex(currentAccentColorHex);

private string ColorNameFromHex(System.Windows.Media.Color hexColor)
{
    switch(hexColor.ToString())
    {
        case "#FF1BA1E2": return "Blue";
        case "#FFA05000": return "Brown";
        case "#FF339933": return "Green";
        case "#FFE671B8": return "Pink";
        case "#FFA200FF": return "Purple";
        case "#FFE51400": return "Red";
        case "#FF00ABA9": return "Teal";
        case "#FF8CBF26":
        case "#FFA2C139": return "Lime";
        case "#FFFF0097":
        case "#FFD80073": return "Magenta";
        case "#FFF09609": return "Mango";
        default: return "custom eleventh color"; //Manufacturer color
    }
}

您可以返回“真正的”颜色,而不是返回包含“红色”的字符串。为此,您必须更改方法的返回类型和值。

希望这有帮助!

答案 1 :(得分:0)

您可以从参考资料中获取当前主题,例如获取这样的背景颜色。在应用程序中,您可以在Application_Launching以及Application_Activated中查看此内容,以查看应用程序在后台时主题是否已更改。

我很确定你可以在XNA游戏中做类似的事情:

public enum PhoneTheme
    {
        Light,
        Dark
    };

public static PhoneTheme CurrentTheme {get;私人集; }

关注您的激活/启动代码:

string theme = Resources["PhoneBackgroundColor"].ToString();

CurrentTheme = theme == "#FF000000"
                        ? PhoneTheme.Dark
                        : PhoneTheme.Light;