Изменение темы во время выполнения - PullRequest
2 голосов
/ 07 декабря 2010

Я использую JetPack тему и устанавливаю ее из App.xaml:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets/Styles/Brushes.xaml"/>
            <ResourceDictionary Source="Assets/Styles/Fonts.xaml"/>
            <ResourceDictionary Source="Assets/Styles/CoreStyles.xaml"/>
            <ResourceDictionary Source="Assets/Styles/Styles.xaml"/>
            <ResourceDictionary Source="Assets/Styles/SdkStyles.xaml"/>
            <ResourceDictionary Source="Assets/Styles/ToolkitStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Как я могу установить тему из кода и изменить тему во время выполнения?

1 Ответ

1 голос
/ 08 декабря 2010

Элемент управления Silverlight Toolkit Theme обеспечивает поддержку изменения темы во время выполнения. К сожалению, темы приложений, такие как The JetPack Theme, не являются темами Toolkit (спросите Microsoft, почему). Так что вам придется конвертировать их самостоятельно. Изучение источников тем из набора инструментов помогает нам понять, как:

public class JetPackTheme : Theme
{
    private static Uri ThemeResourceUri = new Uri("/MyComponent;component/JetPackTheme.xaml", UriKind.Relative);

    public JetPackTheme() : base(ThemeResourceUri) { }

    public static bool GetIsApplicationTheme(Application app)
    {
        return GetApplicationThemeUri(app) == ThemeResourceUri;
    }

    public static void SetIsApplicationTheme(Application app, bool value)
    {
        SetApplicationThemeUri(app, ThemeResourceUri);
    }
}

Теперь, при условии, что ваши ресурсы находятся в папке с именем JetPackTheme , вот JetPackTheme.xaml :

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/Brushes.xaml"/>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/Fonts.xaml"/>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/CoreStyles.xaml"/>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/Styles.xaml"/>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/SdkStyles.xaml"/>
        <ResourceDictionary Source="/MyComponent;component/JetPackTheme/ToolkitStyles.xaml"/>    
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Теперь вы должны иметь возможность использовать JetPackTheme в своем приложении:

<myCmp:JetPackTheme x:Name="myTheme">
    <SomeNeatStuff>
        ...
    </SomeNeatStuff>
</myCmp:JetPackTheme>

Чтобы изменить тему во время выполнения, вы можете просто сделать

myTheme.ThemeUri = new Uri("Path/To/The/Theme.xaml", UriKind.RelativeOrAbsoluteOrWhatever);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...