Silverlight App.xaml中的“元素已经是另一个元素的子元素”错误

时间:2009-11-13 08:32:36

标签: 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.SL.App">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ProvisiorResourceDictionary.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

报告整个ResourceDictionary元素的错误(从第5行到第9行)。

ProvisiorResourceDictionary.xaml包含许多样式和模板。在我看来,没有什么令人兴奋的。

有谁知道出了什么问题?

亲切的问候,

罗纳德威尔登伯格

5 个答案:

答案 0 :(得分:6)

由于AnthonyWJones的评论中提供的提示,我自己找到了问题的原因。

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

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

编辑在WPF 中,您可以对资源字典中的对象使用x:Shared属性来强制WPF为每个资源检索创建新实例。不幸的是,Silverlight does not support这个属性。

答案 1 :(得分:3)

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

IE特别抱怨会抱怨这个。

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

然而,由于这与资源有关,因此可能会出现这样一个问题的答案: - )

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果您尝试将带有Key的Storyboard放在ResourceDictionary中,而不是将其放在ControlTemplate中,那么这似乎也是oocurs

这是因为Storyboard是有状态对象,无法重复使用(如果它们已经启动,暂停等,它们会跟踪。)

答案 4 :(得分:0)

@Simon_Weaver在答案中的建议

  

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

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

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

是罪魁祸首。加至Resource Dictionaries #Objects for Resource Dictionary Usage,它不会将Path列为可共享项目。