Вложенные словари ресурсов - PullRequest
1 голос
/ 23 февраля 2012

Я хочу определить несколько тем для своего приложения и переключать их каждый раз, когда захочу, но я хочу поместить стили каждого элемента управления каждой темы в отдельный ResourceDictionary, чтобы он создавал файлы в деловом стиле, и я могу управлять их быстро и легко. Но проблема в следующем: стили вложенных ресурсных словарей не применяются. любое предложение? спасибо.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Я предполагаю, что вы использовали отдельный словарь ресурсов для каждого элемента управления и повторяли его для других тем. Поэтому я предлагаю вам сохранить словарь ресурсов для каждой темы, например: Theme1.xaml .. и объединить все свои словари ресурсов, которые входят в эту тему Пример:

  <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="pack://application:,,,/UrProject;component/Themes/Theme1/Button.xaml"/>
    <ResourceDictionary Source="pack://application:,,,/UrProject;component/Themes/Theme1/Combobox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/UrProject;component/Themes/Theme1/ListBox.xaml" />
    <ResourceDictionary Source="pack://application:,,,/UrProject;component/Themes/Theme1/Checkbox.xaml" />
</ResourceDictionary.MergedDictionaries>

Вы можете добавить и удалить этот словарь ресурсов в свое приложение для переключения вашей темы. Надеюсь, поможет. :)

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

Вы можете применить тему к своему приложению, как это ..

    public static void ApplyTheme(string themeName)
    {
        if (string.IsNullOrEmpty(themeName) == false)
        {
            bool exist = false;
            string themeFileName =
                string.Format("/UrProject;component/Styles/{0}{1}", themeName, ".xaml");
            theme.Source = new Uri(themeFileName, UriKind.RelativeOrAbsolute);
            foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
            {
                if (string.Equals(dictionary.Source, themeFileName))
                {
                    exist = true;
                    break;
                }
            }
            if (exist == false)
            {
                Application.Current.Resources.MergedDictionaries.Add(theme);
            }

        }
    }
...