2009-11-13 14 views
8

私は私のApp.xamlファイル内の奇妙なエラーを取得しておいてください。Silverlightの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> 

エラーが(ライン5〜9)全体ResourceDictionary要素に対して報告されています。

ProvisiorResourceDictionary.xamlには、多くのスタイルとテンプレートが含まれています。私の意見ではエキサイティングなことはありません。

何が間違っているか知っていますか?

敬具、

ロナルドWildenberg

+0

他の情報を提供できますか? ProvisorResourceDictionary.xamlには何がありますか。それは他の場所でも使われていますか?コンストラクタやプロパティセットの手順で、いくつかの奇妙なことをしているいくつかの家庭で栽培されたコンポーネントがありますか? – AnthonyWJones

+0

ProvisiorResourceDictionaryの内容について私の質問にいくつかの情報を追加しました。それはスタイルとテンプレートだけを含んでいます。たぶん私はそれが役立つかどうかを確認するために断片からコードを削除しようとします。 –

+0

私は考えがあります。私は2つの異なるテンプレートセレクタ(いくつかの情報に基づいて使用するテンプレートを検出するカスタムクラス)に追加するDataTemplateを持っています。 DataTemplateを再利用することは不可能ですか? –

答えて

6

私は、問題の原因にAnthonyWJonesによってコメントに提供するヒントのおかげで自分自身を発見しました。

Silverlight resource dictionary内のすべてが共有可能である必要があります。その理由は、リソースディクショナリ内のアイテムは、コントロール階層内の複数の場所に(おそらく)追加されるためです。

リソースディクショナリ内に共有可能ではない2つのアイテムがありました。

EDIT:WPFで、あなたはすべてのリソース検索のための新しいインスタンスを作成するために、WPFを強制的にリソースディクショナリ内のオブジェクトにx:Shared属性を使用することができます。残念ながら、Silverlight does not supportこの属性。

+3

ヒント:このエラーの原因となっている項目が不明な場合は、App.xamlが参照する2番目のResources2.xamlを作成し、いくつかのファイルに移動してください。完全に再コンパイルしてください。これにより、共有できないリソースが特定され、問題が発生する可能性があります。 –

+3

このエラーが発生し、開発者の一人が要素の1つに 'x:Key'の代わりに' x:Name'を入れました。 – bendewey

3

おそらく、この質問の回答ではありませんが、もう一つの一般的な理由は、この要素を取得することができます既に要素は別の要素の子です。イメージなどのリソースを読み込もうとしていて、ファイル名が間違っている場合はエラーです。

IEは特にこれについて文句を言うでしょう。

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

しかし、これはおそらく、これは

1

:-)この質問への答えになるシナリオがあるかもしれないリソースに関連しているので、私は私のStyles.xamlをチェックする非常に同じ問題を、持っていましたファイル、それは同じ名前のいくつかの要素を持っていた、私は要素の名前を変更し、それらを一意にして、問題が解決しました:)

0

これは、ResourceDictionary内のキーでストーリーボードを入れようとすると、それをControlTemplateの中に入れるのではなく、

ストーリーボードはステートフルなオブジェクトであり、再利用できないためです(開始、一時停止などを追跡します)。)

0

@Simon_Weaverによってアドバイスが答え

TIPに:あなたは、このエラーの原因となっている項目がわからない場合は、ちょうど 二App.xamlによって参照Resources2.xamlと動きを作成します一部のファイルには が含まれています。完全に再コンパイルしてください。これは あなたは非共有可能と を引き起こし問題

このアイテム、私が実際に削除最初のものを見つけるために、私を導いているリソースを決定できるようにする必要があります。未使用のパスオブジェクトでした:

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

を犯人としました。 Resource Dictionaries #Objects for Resource Dictionary Usageに到着すると、共有可能アイテムとしてPathはリストされません。

関連する問題