Для чего предназначен атрибут ThemeInfo?
Всякий раз, когда я создаю новое приложение 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
? Я что-нибудь сломаю, если удалю его?
Ответы
Ответ 1
Атрибут ThemeInfo указывает, где автоматический механизм тезисов должен искать тематические словари и общий словарь. Каждому параметру может быть присвоено одно из следующих значений:
- Нет (по умолчанию): не искать словарь ресурсов.
- SourceAssembly: словарь - это текущая сборка.
- ExternalAssembly: словарь находится в другой сборке, которая должна быть названа
<AssemblyName>.<ThemeName>.dll
, где <AssemblyName>
- текущая сборка
имя.
Если в тематических словарях указаны стили для элементов управления, определенных во внешних сборках, например, элементы управления WPF, такие как System.Windows.Controls.ProgressBar
и System.Windows.Button
, тогда вы должны использовать ThemeDictionaryExtension
, чтобы указать приложение как источник для тематические словари.
Ответ 2
Структура WPF использует этот атрибут в библиотеках управления как удобный способ применения ресурсов к элементам управления.
Учтите, что Windows может запускаться с различными темами пользовательского интерфейса (Aero - один из таких примеров). Элементы управления WPF, предоставленные Microsoft, меняют внешний вид для разных тем среды.
Если ваше приложение требует такого поведения, вы можете создать различные тематические словари в папке themes
проекта библиотеки управления.
Даже если вам не нужна поддержка нескольких тегов, удобно размещать ресурсы в файле generic.xaml
, чтобы они были доступны элементам управления в сборке. Возможно, ваш элемент (элемент управления) определен в файле .cs
без частичного класса .xaml
, и вам нужно где-то хранить нужные ему ресурсы или (более вероятно) у вас есть ресурсы, которые будут совместно использоваться многими элементами WPF в тот же проект/сборка.
Атрибут, на который вы ссылаетесь, представляет собой метаданные для сопоставления этих ресурсов.