我的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
包含许多样式和模板。在我看来,没有什么令人兴奋的。
有谁知道出了什么问题?
亲切的问候,
罗纳德威尔登伯格答案 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
列为可共享项目。