Ошибка «Элемент уже является потомком другого элемента» в Silverlight App.xaml - PullRequest
8 голосов
/ 13 ноября 2009

В моем файле App.xaml постоянно появляется странная ошибка:

Элемент уже является потомком другого элемента.

Мой файл App.xaml выглядит так:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             x:Class="Celerior.Annapurna.SL.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ProvisiorResourceDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Ошибка сообщается для всего элемента ResourceDictionary (от строк 5 до 9).

ProvisiorResourceDictionary.xaml содержит ряд стилей и шаблонов. Ничего захватывающего на мой взгляд.

Кто-нибудь знает, что не так?

С уважением,

Рональд Вильденберг

Ответы [ 5 ]

6 голосов
/ 13 ноября 2009

Я сам нашел причину проблемы благодаря подсказкам, приведенным в комментарии AnthonyWJones.

Похоже, что все внутри словаря ресурсов Silverlight должно быть общим. Причина в том, что элементы в словаре ресурсов (вероятно) будут добавлены в нескольких местах в иерархии элементов управления.

В моем словаре ресурсов было два элемента, которые нельзя было использовать совместно.

EDIT : В WPF вы можете использовать атрибут x:Shared для объектов внутри словаря ресурсов, чтобы заставить WPF создавать новый экземпляр для каждого поиск ресурсов. К сожалению, Silverlight не поддерживает этот атрибут.

3 голосов
/ 11 августа 2010

Возможно, НЕ ответ на этот вопрос , но есть еще одна распространенная причина, по которой вы можете получить это: "Элемент уже является потомком другого элемента" ошибка в том случае, если вы пытаетесь загрузить ресурс, например изображение, и у вас неверное имя файла.

IE особенно жалуется, будет жаловаться на это.

<Image ToolTipService.ToolTip="Email customer" 
       Source="../images/FILE-THAT-DOESNT-EXIST.png"></Image>

Однако, поскольку это связано с ресурсами, может быть сценарий, в котором это будет ответом на этот вопрос: -)

1 голос
/ 31 октября 2010

У меня была та же проблема, когда я проверял свой файл Styles.xaml, в нем было несколько элементов с одинаковым именем, я менял имя элементов и делал их уникальными, и проблема решалась:)

0 голосов
/ 29 июня 2015

совет @Simon_Weaver в ответе

СОВЕТ: если вы не уверены, какие элементы вызывают эту ошибку, просто создайте второй Resources2.xaml, на который ссылается App.xaml, и переместите поверх некоторых файлов к нему. убедитесь, что вы перекомпилировали полностью. это должно позволяют определить, какие ресурсы не являются общими и проблема

заставил меня найти этот предмет, первый, который я на самом деле удалил; это был неиспользуемый объект пути:

<Path x:Key="RightArrowPath" .. />

как виновник. В соответствии с Словари ресурсов # Объекты для использования словаря ресурсов , он не перечисляет Path в качестве разделяемого элемента.

0 голосов
/ 31 января 2014

Похоже, это также происходит, если вы пытаетесь поместить раскадровку с ключом внутри ResourceDictionary вместо помещения его в ControlTemplate

Это потому, что раскадровка является объектом с состоянием и не может использоваться повторно (они отслеживают, запущены ли они, приостановлены и т. Д.)

...