2010-01-11 15 views
6

Aşağıdakileri yeniden üretmek çok kolay: Başka bir dosyadan kaynakları kullanan bir xaml uygulaması oluşturuyorum. Eğer çalıştırırsanızXAML - XmlParseException öğesini birleştirilmiş "Birleştirilmiş öğeler" zaten eklendi. Niye ya?

<Window> 
<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
      <ResourceDictionary> 
       <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

       </Style> 
       <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

       </Style> 
      </ResourceDictionary> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 
.... 
</Window> 

Bu kod parça kilitlenmesine:

Item has already been added. Key in dictionary: 'System.Windows.Controls.Border' Key being added: 'System.Windows.Controls.Border' 

biz gitmek için yolu bu gibi yerel ve küresel kaynaklar birleştirmek için bir MergedDictionaries-etiketi oluşturmaktır MergedDictionaries-etiketi kaldırmak, kod beklendiği gibi çalışacaktır: biz Birleştirilmiş Kaynakları kullanmak istisna atar neden anlamıyorum

<Window> 
<Window.Resources> 
    <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

    </Style> 
    <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

    </Style> 
</Window.Resources> 
</Window> 

. Elbette, düzeltme şu an için yeterince kolay (kaynakları daha düşük bir seviyeye taşıyın). Bu 'normal' davranışı olup olmadığını bilmek güzel olurdu ...

+1

Belirli bir hata iletisini arayan kullanıcılar için ek bilgi: Yanlışlıkla aynı 'TargetType' ve' x: Key' özniteliğine sahip iki stil kullanırken bu sorunla karşılaştım. Bunlardan birini kaldırmak (örneğin, içeriğini diğerine birleştirerek), benim için bu sorunu çözdü. – Jan

cevap

10

Kaynaklarınız ayrı bir dosyada bulunmuyorsa, birleştirilmiş sözlüklerin parçası olmamalıdır. Böyle dışarıda onları taşıyın: bahsedilen

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="path.to.xaml.file"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style TargetType="{x:Type Border}" x:Key="TypeBlock"> 

     </Style> 
     <Style TargetType="{x:Type Border}" x:Key="SetBlock"> 

     </Style> 
    </ResourceDictionary> 
</Window.Resources> 

, hata mesajı biraz yanıltıcı ve XAML derleyicisi hata bir sonucu olabilir.

+0

Tamam, bilgi için teşekkürler! – RoelF

İlgili konular