Wpf объединенный словарь ресурсов не распознается из app.xaml
У меня есть приложение WPF .net 4.5, где у меня возникают проблемы при объединении словарей ресурсов.
У меня точно такая же проблема, какЭто ТАК вопрос а такжеЭтот вопрос но принятое решение не работает для меня.
У меня есть словари ресурсов, объявленные в моем app.xaml следующим образом (упрощено для ясности):
<Application.Resources>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml" />
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Проблема: Приложение может «СМОТРЕТЬ» из справочника ColorStyles, когда оно указано в app.xaml, но если я переместлю / вложу его в ResourceLibrary.xaml, то приложение ColorStyles.xaml не «увидит» приложение, и появятся ошибки, связанные с отсутствующими статическими ресурсами.
Вот как я создаю словарь ResourceLibrary.xaml (упрощенно):
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<!-- BRUSHES AND COLORS -->
<ResourceDictionary Source="Brushes/ColorStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Причина изменения: Моя текущая организация моих словарей ресурсов ужасна, и мне нужно ее изменить (так как я создаю объекты более одного раза). Я хотел иметь один словарь ресурсов в папке «Skin», а затем подпапки для организации оставшихся словарей стилей, которые будут объединены в файле ResourceLibrary.xaml, который, в свою очередь, будет вызываться в app.xaml.
Что я пробовал: Да, я пытался использовать решение по ссылке выше:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
</ResourceDictionary>
</Application.Resources>
но я получаю следующую ошибку в фиктивной строке стиля:
Ошибка 2 Элементы свойства не могут быть в середине содержимого элемента. Они должны быть до или после содержания.
Изменение кода на следующий избавило от ошибки выше, благодаря комментарию lisp:
<Application.Resources>
<ResourceDictionary>
<!--Global View Model Locator-->
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<!-- Dummy Style, anything you won't use goes -->
<Style TargetType="{x:Type Rectangle}" />
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skin/ResourceLibrary.xaml"></ResourceDictionary>
<ResourceDictionary Source="Skin/Brushes/ColorStyles.xaml" />
<ResourceDictionary Source="Skin/NamedStyles/AlertStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
но библиотека ресурсов до сих пор не вызывается.
Я также попытался изменить все пути к файлам, чтобы упаковать URI, но это также не решило проблему.
Я попытался переместить resourceLibrary.xaml и другие словари ресурсов в другой проект библиотеки классов (используя ту же структуру папок и файлы, что и выше). Затем я использовал следующий URI, но по-прежнему не могу получить доступ к ресурсам, объявленным в файле ResourceLibrary.xaml.
<ResourceDictionary Source="pack://application:,,,/FTC.Style;component/ResourceLibrary.xaml" />
Но опять же, если я добавлю каждый словарь ресурсов в файл App.Xaml, используя вышеупомянутый формат UIR, ресурсы пригодны для использования.
Ошибка исчезла, но я все еще не могу использовать ресурсы, которые являются частью объединенного словаря в файле ResourceLibrary.xaml. Я склонен согласиться с комментарием dowhile для того, должен ли я использовать этот подход, но я хочу выяснить это, потому что наиболее распространенное решение этой проблемы (см. Ссылки в верхней части этого поста) не работает и, возможно, это решение может помочь кому-то еще.
Вопрос: Почему файл ResourceLibrary.xaml игнорируется?