Что такого особенного в Generic.xaml?

Я пытался выяснить, как организовать файлы ResourceDictionary для повторного использования и совместного использования с другими членами моей команды.

Я продолжаю сталкиваться с «Generic.xaml», но если я смотрю на MSDN для Generic.xaml или просто выполняю поиск Google, я только, кажется, получаю сообщения в блогах и вопросы форума, которые, возможно, упоминают об этом – я не могу показаться ударил по чему-то действительно авторитетному и ясному.

В чем разница между Generic.xaml и MyRandomlyNamedResourceDictionary.xaml? Кажется, в любом случае, мне нужно ссылаться на ResourceDictionaries, хранящиеся в библиотеках с атрибутом Source. Например,:

 <ResourceDictionary Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml"  

Итак, какое преимущество дает Generic.xaml? Имеет ли она какие-либо цели, если я не пытаюсь дать моему приложению несколько «взглядов» (т. Е. Если у меня есть только одна тема)?

Каждый элемент управления в WPF имеет стиль по умолчанию, который обеспечивает, помимо прочего, ControlTemplate Control по умолчанию. WPF ищет стиль по умолчанию в специальном словаре ресурсов в папке «Темы» в той же сборке, что и элемент управления. Ключ для стиля по умолчанию обеспечивается свойством Control.DefaultStyleKey , значение по умолчанию которого переопределяется в каждом подclassе элемента управления.

Имя ресурсного словаря зависит от текущей темы Windows, например, в Vista с использованием темы Aero, словарь называется Aero.NormalColor.xaml, в XP с использованием темы по умолчанию это Luna.NormalColor.xaml. Если стиль не найден в словаре тем, он выглядит в Generic.xaml, т.е. для элементов управления, внешний вид которых не зависит от темы.

Это относится только к любым настраиваемым элементам управления, которые вы определили, т.е. к classам, производным от Control, прямо или косвенно. Вы можете изменить стиль по умолчанию для стандартного элемента управления, исходя из него и вызывая DefaultStyleKeyProperty.OverrideMetadata в статическом конструкторе, но затем вам нужно предоставить полный стиль, включая ControlTemplate.

Обратите внимание, что WPF может видеть внешнюю сборку для вашего стиля по умолчанию, используя атрибут ThemeInfo. Внешняя assembly должна быть названа < YourAssembly > . < ThemeName > .dll, например PresententationFramework.Aero.dll.

Чтобы файл generic.xaml (без generic.xaml регистра) был чем-то особенным, необходимо выполнить два условия:

  • Он должен находиться в папке Sub-root Themes в проекте
  • Сборка должна быть отмечена ThemeInfoAttribute (обычно в AssemblyInfo.cs )

Затем он служит местом поиска по умолчанию для любых стилей по умолчанию, которые вы хотите применить к своим элементам управления. Также обратите внимание, что для стиля, который будет использоваться по умолчанию, он должен объявить как свой TargetType, так и x: Key как тип управления, который должен быть стилизован.

Если вы хотите добавить в приложение целые темы и тему, которые выполняются с помощью некоторого кодирования, этот метод просто определяет словарь ресурсов по умолчанию.

Давайте будем гением компьютера.