Как изменить темы управления по умолчанию? - PullRequest
0 голосов
/ 16 марта 2012

Я хочу изменить шаблоны управления по умолчанию для моего проекта.Для моего первого изменения я просто хочу установить имя детали для ScrollViewer списка в каждой теме.

Вот моя структура: MyControlLibrary: определяет пару элементов управления и определяет темы для стандартных элементов управления wpf.MyApplication: использует библиотеку элементов управления и включенные темы.

Вот что я понял до сих пор.Загрузите темы по умолчанию: http://archive.msdn.microsoft.com/Project/Download/FileDownload.aspx?ProjectName=wpfsamples&DownloadId=7812

Добавлены загруженные темы в папку «Темы» в MyControlLibrary, добавлены необходимые ссылки и изменено пространство имен темы xmlns: для ссылки на сборку.Я не понял, что делать дальше.Если просто переопределить шаблон, это не слишком сложно, но я хочу, чтобы приложение все еще поддерживало тему.

Заранее спасибо

РЕДАКТИРОВАТЬ: Хорошо, я нашелрешение для этого.Я надеюсь, что это поможет кому-то еще.

Обновите ваш App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    <!-- other styles go here -->
</Application.Resources>

, где AssemblyWithThemes - это название сборки, в которой находится папка Themes \ с файлами тем.Я считаю, что на сборку нужно ссылаться и из вашего приложения.

Очень важно, если вы добавляете дополнительные ресурсы непосредственно в файл App.xaml, размещайте их там, где находится комментарий, в противном случае содержащийся ResourceDictionary становится другим ресурсом.вместо установки свойства Application.Resources.

Затем все дополнительные стили должны указывать атрибут BasedOn для сохранения изменений темы.Для динамически создаваемых окон я использовал новый стиль (тип), и он предотвращал использование переопределенной темы.После перехода на новый стиль (тип, стиль) он работал отлично.

1 Ответ

0 голосов
/ 21 марта 2012

Хорошо, я нашел решение для этого. Я надеюсь, что это помогает кому-то еще.

Обновите ваш App.xaml

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="{ThemeDictionary AssemblyName=AssemblyWithThemes}"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
    <!-- other styles go here -->
</Application.Resources>

где AssemblyWithThemes - имя сборки, в которой находится папка Themes \ с файлами тем. Я считаю, что на сборку нужно ссылаться и из вашего приложения.

Очень важно, если вы включаете дополнительные ресурсы непосредственно в файл App.xaml, размещайте их там, где находится комментарий выше, в противном случае содержащийся ResourceDictionary становится другим ресурсом вместо установки свойства Application.Resources.

Затем для всех дополнительных стилей необходимо указать атрибут BasedOn, чтобы сохранить изменения темы. Для динамически создаваемых окон я использовал новый стиль (тип), и он предотвращал использование переопределенной темы. После перехода на новый стиль (тип, стиль) он работал отлично.

...