我一直在尝试使用http://geekswithblogs.net/mikebmcl/archive/2010/09/16/using-wp7-themes-in-your-xna-game.aspx提供的指南,但我找不到应用程序名称,也似乎无法找到SolidColorBrush的替代品。
遗憾的是网上没有库或易于使用的代码,以便在Windows手机上以XNA方式获取磁贴颜色,即使它在Silverlight中很简单。
任何想法如何解决这个问题?
答案 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;