Почему эта запись 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>
Другие вопросы по тегам