Подтвердить что ты не робот

Для чего предназначен атрибут 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? Я что-нибудь сломаю, если удалю его?

4b9b3361

Ответ 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 в тот же проект/сборка.

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