Объединенные словари ресурсов универсального приложения Windows / Windows Phone 8.1 (WinRT) вызывают ошибку

#c# #.net #xaml #windows-8.1 #windows-phone-8.1

#c# #.net #xaml #Windows-8.1 #Windows-phone-8.1

Вопрос:

У меня есть приложение Windows 8.1 (WinRT) и некоторые библиотеки классов пользовательского интерфейса, и я пытаюсь объединить ResourceDictionaries друг с другом, чтобы лучше разделить мои ресурсы. У меня есть следующие три проекта с ресурсами:

Framework.UI.Universal (универсальная библиотека классов)

Это общий файл.xaml, содержащийся в папке Themes в этом проекте:

 <ResourceDictionary>
    <!-- Contains some resources used by Windows and Windows Phone -->
</ResourceDictionary>
  

Framework.UI.Windows (библиотека классов Windows)

Это еще один общий файл.xaml, содержащийся в папке Themes в этом проекте. Как вы можете видеть, я объединяю словарь ресурсов из универсального проекта, а также добавляю другие ресурсы.

 <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="ms-appx:///Framework.UI.Universal/Themes/Generic.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    <!-- Contains Windows specific resources -->
</ResourceDictionary>
  

MyApp.Windows (проект приложения Windows 8.1)

Это мое приложение для Windows 8.1. Я объединяю словарь ресурсов, специфичный для Windows, в файл App.xaml, а также добавляю ресурсы, специфичные для приложения.

 <Application x:Class="CurrencyConverter.Client.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:InfrastructureViews="using:Infrastructure.Client.Views"
             RequestedTheme="Light">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ms-appx:///Framework.UI.Windows/Themes/Generic.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <!-- Contains Windows app specific resources -->
        </ResourceDictionary>
    </Application.Resources>
</Application>
  

Теоретически это должно работать, но при запуске я получаю исключение с сообщением об ошибке ниже:

обнаружен цикл в объединенных словарях ресурсов

Комментарии:

1. Похоже, что существуют циклические ссылки, чего нет-нет.

2. Но я вообще не добавляю циклическую ссылку, насколько я вижу.

3. Значит, у вас нет двух словарей, указывающих друг на друга и тому подобное?

4. Нет, у меня есть цепочка ресурсов. A -> B -> C. Где A — универсальные ресурсы, B — ресурсы Windows, а C — App.xaml.

Ответ №1:

Переименование Generic.xaml в Universal project в UniversalGeneric.xaml решило проблему. Похоже, это ошибка WinRT.