2009-11-13 3 views
8

Ich halte einen seltsamen Fehler in meiner App.xaml Datei bekommen:‚Element ist bereits das Kind eines anderen Element‘ Fehler in Silverlight App.xaml

Element ist bereits das Kind eines anderes Elements.

Meine App.xaml Datei sieht wie folgt aus:

<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> 

Der Fehler wird für das gesamte ResourceDictionary Element berichtet (von Zeilen 5 bis 9).

ProvisiorResourceDictionary.xaml enthält eine Reihe von Stilen und Vorlagen. Nichts aufregendes meiner Meinung nach.

Weiß jemand, was falsch ist?

Mit freundlichen Grüßen

Ronald Wildenberg

+0

Können Sie weitere Informationen bereitstellen. Was ist in ProvisorResourceDictionary.xaml. Wird es auch anderswo verwendet? Gibt es einige eigenentwickelte Komponenten darin, die seltsame Dinge in ihren Konstruktoren oder Eigenschaftssatzprozeduren machen? – AnthonyWJones

+0

Ich habe meiner Frage zu den Inhalten von ProvisiorResourceDictionary einige Informationen hinzugefügt. Es enthält nur Stile und Vorlagen. Vielleicht werde ich versuchen, Code Stück für Stück daraus zu entfernen, um zu sehen, ob das hilft. –

+0

Ich habe eine Idee. Ich habe eine DataTemplate, die ich zu zwei verschiedenen Vorlagenselektoren hinzufüge (benutzerdefinierte Klassen, die basierend auf einigen Informationen die zu verwendende Vorlage erkennen). Ist es nicht möglich, DataTemplate wiederzuverwenden? –

Antwort

6

ich die Ursache des Problems fand mich dank der Hinweise im Kommentar von AnthonyWJones zur Verfügung gestellt.

Es scheint alles in einem Silverlight resource dictionary muss shareable sein. Der Grund dafür ist, dass Elemente in einem Ressourcenwörterbuch (wahrscheinlich) an mehreren Stellen in der Steuerungshierarchie hinzugefügt werden.

Ich hatte zwei Elemente in meinem Ressourcenwörterbuch, die nicht gemeinsam genutzt werden konnten.

EDIT: In WPF, können Sie das x:Shared Attribut auf Objekte innerhalb einer Ressource Wörterbuch verwenden WPF zu zwingen, eine neue Instanz für jede Ressource Abruf zu erstellen. Leider Silverlight does not support dieses Attribut.

+3

TIPP: Wenn Sie nicht sicher sind, welche Elemente diesen Fehler verursachen, erstellen Sie einfach eine zweite Resources2.xaml, auf die von App.xaml verwiesen wird, und verschieben Sie einige Dateien dorthin. stellen Sie sicher, dass Sie vollständig neu kompilieren. dies sollte Ihnen erlauben zu bestimmen, welche Ressourcen nicht gemeinsam nutzbar sind und das Problem verursachen –

+3

Ich hatte diesen Fehler und stellte sich heraus, dass einer unserer Entwickler 'x: Name' anstelle von' x: Key' auf eines der Elemente setzte. – bendewey

3

Wahrscheinlich keine Antwort auf diese Frage aber ein anderer allgemeiner Grund, den Sie erhalten können, "Element ist bereits das Kind eines anderen Elements." Fehler ist, wenn Sie versuchen, eine Ressource wie ein Bild zu laden, und Sie haben den Dateinamen falsch.

IE vor allem Beschwerden werden sich darüber beschweren.

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

jedoch, da dies zu Ressourcen zusammenhängt könnte es möglicherweise ein Szenario, wo dies wäre eine Antwort auf diese Frage sein :-)

1

ich das gleiche Problem hatte, als ich meine Styles.xaml geprüft Datei, es hatte einige Elemente mit dem gleichen Namen, ich änderte den Namen der Elemente und machte sie einzigartig, und das Problem gelöst :)

0

Es scheint dies auch oocurs, wenn Sie versuchen, ein Storyboard mit einem Schlüssel in einem ResourceDictionary zu setzen , anstatt es in ein ControlTemplate

zu legen

Dies liegt daran, dass das Storyboard statusbehaftete Objekte sind und nicht wiederverwendet werden können (sie verfolgen, ob sie gestartet, pausiert usw. sind))

0

Die Beratung durch @Simon_Weaver in der Antwort

TIPP: Wenn Sie nicht sicher sind, welche Elemente dieser Fehler verursachen, nur eine zweite Resources2.xaml durch die App.xaml und bewegen verwiesen erstellen über einige Dateien zu. stellen Sie sicher, dass Sie vollständig neu kompilieren. dies sollte können Sie eigentlich, welche Ressourcen nicht gemeinsam nutzbaren und verursacht das Problem

mich finden diesen Artikel, die erste, die ich entfernt bestimmen; es war ein unbenutztes Pfadobjekt:

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

als der Schuldige. Accroding zu Resource Dictionaries #Objects for Resource Dictionary Usage, listet es kein Path als shareable Element auf.

Verwandte Themen