';元素已经是另一个元素的子元素';Silverlight App.xaml中存在错误

';元素已经是另一个元素的子元素';Silverlight App.xaml中存在错误,silverlight,xaml,silverlight-3.0,Silverlight,Xaml,Silverlight 3.0,我的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

我的
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
包含许多样式和模板。在我看来没有什么令人兴奋的

有人知道怎么回事吗

亲切问候,


罗纳德·威尔登伯格(Ronald Wildenberg)

多亏了安托尼·琼斯(AnthonyWJones)在评论中提供的提示,我自己找到了问题的原因

看起来a中的所有内容都必须是可共享的。原因是资源字典中的项(可能)将添加到控件层次结构中的多个位置

我的资源字典中有两项不可共享


编辑:在WPF中,可以使用资源字典中对象的属性强制WPF为每次资源检索创建新实例。不幸的是,Silverlight无法使用此属性。

可能不是此问题的答案,但另一个常见原因是您可以获得此“元素已经是另一个元素的子元素”。错误是,如果您试图加载资源,例如图像,但文件名错误

特别是抱怨者会抱怨这件事

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


但是,由于这与资源有关,因此可能会出现这样一种情况:这将是对这个问题的回答:-)

我遇到了非常相同的问题,当我检查我的style.xaml文件时,它有一些同名的元素,我更改了元素的名称并使它们唯一,问题解决了:)

如果您尝试将带有键的故事板放在ResourceDictionary中,而不是放在ControlTemplate中,那么这似乎也是个难题


这是因为故事板是有状态的对象,不能重复使用(如果启动、暂停等,它们会跟踪)。

答案中@Simon_Weaver的建议


提示:如果您不确定是哪些项目导致了此错误,只需 创建App.xaml引用的第二个Resources2.xaml并移动 在一些文件上。确保完全重新编译。这应该 允许您确定哪些资源不可共享并导致 问题

让我找到了这个项目,第一个我实际上删除;它是一个未使用的路径对象:

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


作为罪魁祸首。根据,它不会将路径列为可共享项。

您可以提供其他信息吗。ProvisiorResourceDictionary.xaml中的内容。它也在其他地方使用吗?其中是否有一些自行开发的组件在其构造函数或属性集过程中做了一些奇怪的事情?我在问题中添加了一些关于ProvisiorResourceDictionary内容的信息。它只包含样式和模板。也许我会试着一块一块地删除代码,看看这是否有帮助。我有个主意。我有一个DataTemplate,我将它添加到两个不同的模板选择器(根据某些信息检测要使用的模板的自定义类)。无法重用DataTemplate的??提示:如果您不确定是哪些项导致了此错误,只需创建App.xaml引用的第二个Resources2.xaml,并将一些文件移到其中。确保完全重新编译。这将允许您确定哪些资源是不可共享的,并导致出现问题。我遇到了这个错误,结果我们的一位开发人员在其中一个元素上放置了
x:Name
,而不是
x:Key