XAML - Бросок MergedDictionaries XmlParseException “объект был уже добавлен”. Почему?

У меня есть следующее, очень легкое для репродуцирования проблемы: я создаю xaml приложение, которое использует ресурсы из другого файла. Способ пойти состоит в том, чтобы создать MergedDictionaries-тег для слияния локальных и глобальных ресурсов, как это:

<Window>
<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="path.to.xaml.file"/>
            <ResourceDictionary>
                <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

                </Style>
                <Style TargetType="{x:Type Border}" x:Key="SetBlock">

                </Style>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>
....
</Window>

Этот маленький кусочек кода откажет при выполнении его:

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border'  Key being added: 'System.Windows.Controls.Border'

Если мы удалим MergedDictionaries-тег, то код будет работать как ожидалось:

<Window>
<Window.Resources>
    <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

    </Style>
    <Style TargetType="{x:Type Border}" x:Key="SetBlock">

    </Style>
</Window.Resources>
</Window>

Я не понимаю, почему это выдает исключение, когда мы используем Объединенные Ресурсы. От курса фиксация достаточно легка на данный момент (переместите ресурсы в более низкий уровень). Было бы хорошо знать, является ли это 'нормальным' поведением...

6
задан Dave Clemmer 15 August 2011 в 19:23
поделиться

1 ответ

Розетки должны быть довольно простыми. Какие данные нужно отправить? Если это просто простые строки/другие примитивные типы, вы можете просто придумать базовый xml-макет и отправить его.

-121--4180482-

В нашем коде для обмена данными 1.1 < -- > 3.5 используются как дистанционные, так и веб-службы. Мы обнаружили, что веб-службы легче всего переносить с 1.1 до 3.5.

-121--4180483-

Если ваши ресурсы не находятся в отдельном файле, они не должны входить в состав объединенных словарей. Переместите их наружу так:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="path.to.xaml.file"/>
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="{x:Type Border}" x:Key="TypeBlock">

        </Style>
        <Style TargetType="{x:Type Border}" x:Key="SetBlock">

        </Style>
    </ResourceDictionary>
</Window.Resources>

Это означает, что сообщение об ошибке немного вводит в заблуждение и может быть результатом ошибки в компиляторе XAML.

10
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: