Для чего нужен атрибут ThemeInfo? - PullRequest
30 голосов
/ 22 июля 2009

Каждый раз, когда я создаю новое приложение WPF или пользовательскую библиотеку управления WPF, файл AssemblyInfo.cs содержит следующий атрибут:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, 
    //where theme specific resource dictionaries are located
    //(used if a resource is not found in the page, 
    // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly 
    //where the generic resource dictionary is located
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries)
)]

Для чего этот атрибут ThemeInfo? Я что-нибудь сломаю, если уберу?

Ответы [ 2 ]

17 голосов
/ 22 июля 2009

Атрибут ThemeInfo указывает, где автоматический механизм создания тем должен искать словари тем и общий словарь. Для каждой опции может быть установлено одно из следующих значений:

  • Нет (по умолчанию): не искать словарь ресурсов.
  • SourceAssembly: словарь является текущей сборкой.
  • ExternalAssembly: словарь находится в другой сборке, которая должна называться <AssemblyName>.<ThemeName>.dll, где <AssemblyName> - текущая сборка имя.

Если в словарях тем указаны стили для элементов управления, которые определены во внешних сборках, например, элементы управления WPF, такие как System.Windows.Controls.ProgressBar и System.Windows.Button, то необходимо использовать ThemeDictionaryExtension, чтобы указать приложение в качестве источника тематические словари.

5 голосов
/ 22 июля 2009

Инфраструктура WPF использует этот атрибут в библиотеках элементов управления как удобный способ применения ресурсов к элементам управления.

Учтите, что Windows может работать с разными темами пользовательского интерфейса (например, Aero). Элементы управления WPF, предоставляемые Microsoft, изменяют их внешний вид для различных тем среды.

Если вашему приложению требуется такое поведение, вы можете создать различные словари тем в папке themes вашего проекта библиотеки управления.

Даже если вам не нужна поддержка нескольких тем, удобно поместить ресурсы в файл generic.xaml, чтобы они были доступны элементам управления в сборке. Возможно, ваш элемент (элемент управления) определен в файле .cs без частичного класса .xaml, и вам нужно где-то хранить необходимые ему ресурсы, или (что более вероятно) у вас есть ресурсы, которые будут совместно использоваться многими элементами WPF в тот же проект / сборка.

Атрибут, на который вы ссылаетесь, - это метаданные для сопоставления этих ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...