Почему эта запись MergedDictionary вызывает исключение?
У нас есть контрольная библиотека, на которую мы ссылаемся в нашем основном приложении. В нем мы решили разделить наш Generic.xaml на ресурсы определенного типа, такие как Brushes.xaml, Colors.xaml и т. Д., А затем просто объединить их в Generic.xaml. Мы создали их как братьев и сестер для Generic.xaml в каталоге Themes, и мы поняли, что вы должны ссылаться на них локально относительно, например, так...
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Brushes.xaml" />
</ResourceDictionary.MergedDictionaries>
А вот атрибуты в AssemblyInfo.cs библиотеки классов
[assembly:ThemeInfo(
// Where theme specific resource dictionaries are located
// (used if a resource is not found in the page, or application resource dictionaries)
ResourceDictionaryLocation.None,
// Where the generic resource dictionary is located
// (used if a resource is not found in the page, app, or any theme specific resource dictionaries)
ResourceDictionaryLocation.SourceAssembly
)]
... но он выбрасывает следующее исключение...
{"Cannot locate resource 'brushes.xaml'."}
(Обратите внимание, что исключение тоже в нижнем регистре. Странно.)
Теперь я попробовал "Brushes.xaml", "Themes/Brushes.xaml" и "/Themes/Brushes.xaml", но безрезультатно. Какого черта я пропускаю?
Примечание. Кажется, это работает, если ресурсы находятся в той же сборке, что и приложение. Кажется, это только относительно разделения ресурсов на библиотеку классов.
1 ответ
Нашел это. Generic.xaml имеет специальные правила, где вы должны использовать полный источник. Это сработало...
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ControlLibrary;component/Themes/Brushes.xaml" />
</ResourceDictionary.MergedDictionaries>