У меня есть приложение WPF.net 4.5, где мне сложно сменить ресурсные словари.
У меня есть такая же проблема, как Этот вопрос SO и Этот вопрос, но принятое решение не работа для меня.
У меня есть ресурсные словари, объявленные в моем приложении .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>
Причина изменения: Моя текущая организация моих ресурсных словарей ужасна, и мне нужно ее изменить (поскольку я создаю объекты более одного раза). Я хотел иметь один словарь ресурсов в папке "Кожа", а затем вложенных папок для организации оставшихся словарей стиля, которые будут объединены в файле 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 Элементы свойств не могут находиться в середине элемента содержание. Они должны быть до или после содержимого.
РЕДАКТИРОВАТЬ 1:
изменение кода на следующее устранено выше, благодаря комментарию 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>
но библиотека ресурсов по-прежнему не вызывается.
END EDIT 1:
Я также попытался изменить все пути к файлам, чтобы упаковать URI, но это также не решило проблему.
ИЗМЕНИТЬ 2:
Я попытался переместить ресурсLibrary.xaml и другие ресурсные словари в другой проект библиотеки классов (используя ту же структуру папок и файлы, что и выше). Затем я использовал следующий URI, но я до сих пор не могу получить доступ к ресурсам, объявленным в файле ResourceLibrary.xaml.
<ResourceDictionary Source="pack://application:,,,/FTC.Style;component/ResourceLibrary.xaml" />
Но опять же, если я добавлю каждый ресурсный словарь в файл App.Xaml, используя вышеприведенный формат UIR, ресурсы можно использовать.
END EDIT 2
После редактирования 1 ошибка исчезла, но я все еще не могу использовать ресурсы, которые являются частью объединенного словаря в файле ResourceLibrary.xaml. Я склонен согласиться с комментарием dowhile относительно того, следует ли мне использовать этот подход, но я хочу понять это, потому что наиболее распространенное решение этой проблемы (см. Ссылки в верхней части этого сообщения) не работает и, возможно, это решение может помочь кому-то другому.
Вопрос: Почему файл ResourceLibrary.xaml игнорируется?