Как получить Windows Phone 7 Theme Color с помощью XNA - PullRequest
1 голос
/ 21 февраля 2012

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

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

Есть идеи, как это сделать?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Вы можете получить тему (темную / светлую) на телефоне более коротким способом (работает и для XNA):

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

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

Чтобы получить AccentColor, вам нужно больше кода (я получилэто из этой статьи на MSDN: Как: применить тематические ресурсы для 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
    }
}

Вместо возврата строки, содержащей 'Red', вы можете вернуть 'real' Color.Для этого вам придется изменить тип возвращаемого значения метода и значение.

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

0 голосов
/ 22 февраля 2012

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

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

public enum PhoneTheme
    {
        Light,
        Dark
    };

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

В коде активации / запуска:

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

CurrentTheme = theme == "#FF000000"
                        ? PhoneTheme.Dark
                        : PhoneTheme.Light;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...