2012-02-21 2 views
1

Я пытался использовать руководство, доступное по адресу http://geekswithblogs.net/mikebmcl/archive/2010/09/16/using-wp7-themes-in-your-xna-game.aspx, но я не могу найти имя приложения, и я, похоже, не могу найти замену для SolidColorBrush.Как получить цвет темы темы для Windows Phone 7 с помощью XNA

К сожалению, нет библиотеки или простой в использовании код в сети, чтобы программно получить цвет плитки в XNA на телефоне Windows, хотя его простое с Silverlight.

Любые идеи, как это сделать?

ответ

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

Вместо того чтобы возвращать строку, содержащуюся в «Красном», вы можете вернуть «реальный» цвет. Для этого вам придется изменить тип возвращаемого значения метода и значения.

Надеюсь, это поможет!

+0

Error Название «Application» не существует в текущем контексте \t Ошибка Тип или пространство имен имя «Цвет 'не существует в пространстве имен' System.Windows.Media ' Weird errors :( – DanTonyBrown

+0

Убедитесь, что у вас есть ссылка на «System.Windows.dll» в вашем проекте. – Abbas

+0

По-прежнему получать приложение не существует :(Цвета исправлено однако :) – DanTonyBrown

0

Вы можете получить текущую тему из Ресурсов, например, получить фоновый цвет следующим образом. В приложении вы можете проверить это в Application_Launching, а также Application_Activated, чтобы увидеть, изменилась ли тема, когда приложение было в фоновом режиме.

Я уверен, что вы можете сделать подобную вещь в игре XNA:

public enum PhoneTheme 
    { 
     Light, 
     Dark 
    }; 

общественного статического PhoneTheme CurrentTheme {получить; частный набор; }

После вашей активации кода/запуска:

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

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

Ошибка Название «Ресурсы» не существует в текущем контексте – DanTonyBrown

Смежные вопросы