2010-09-29 23 views
9

Bu gerçekten aptalca bir soru ama bunu anlayamıyorum.Kaynaklar nasıl tanımlanır? SL4 sayfasındaki bir anahtarla bir MergeDictionary nasıl tanımlanır

Ben tanımlanmış bir MergeDictionary içeren bir sayfa var:

<navigation:Page.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </navigation:Page.Resources> 

ve hiç sorun böyle benim XAML TourneySetupStyles.xaml stiller referans: şimdi ihtiyacım Ancak

<TextBlock Text="Tourney Name:" Style="{StaticResource TourneySetupTextStyle}" /> 

böyle başka bir sayfa kaynak eklemek için:

Ama tasarımcı şimdi bir uyarı atıyor: "Aynı koleksiyonunda kilit ve diğer öğeler olmadan 'ResourceDictionary' ürün karıştırıp yükleme sözlükleri desteklemez tasarımcı. Lütfen 'Kaynaklar' özelliğinin anahtarsız 'ResourceDictionary' öğesi içermediğinden veya 'ResourceDictionary' öğesinin koleksiyondaki tek öğe olduğundan emin olun. "

Bu yüzden ResourceDictionary öğesine şu şekilde bir anahtar ekliyorum: .

<navigation:Page.Resources> 
     <local:Tournament x:Key="tournament" /> 
     <ResourceDictionary x:Key="whatever"> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 

    </navigation:Page.Resources> 

ve uyarı uzağa gider AMA şimdi TourneySetupStyles stil benim referans artık çalışmıyor:

Yani sanırım "Ad/Anahtar TourneySetupTextStyle ile Kaynak bulunamıyor" araştırma ion: ResourceDictionary'ın anahtarlandığı şekilde stile nasıl erişebilirim? o ileride başvurmak için harika olurdu neden

<navigation:Page.Resources> 
    <ResourceDictionary x:Key="TourneySetupStyles"> 
      <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="../Assets/TourneySetupStyles.xaml"/> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    <local:Tournament x:Key="tourneySetupViewModel" /> 
</navigation:Page.Resources> 

kimse açıklayabilir ise:

+0

Teşekkürler! Aynı hatayı (WPF'de) aldım ve çözümünüz çalışıyor. – Noich

cevap

1

iç çekiş o bildirimleri sırası en kısa sürede, önemli olan ben aşağı ilk kaynak hareket ederken şimdi çalışıyor görünüyor ...

8

Sadece bugün bu işe koştum - WPF/Silverlight'a derleme yapıyorum. Yerel kaynağı ResourceDictionary düğümüne yerleştirin, ResourceDictionary düğümüne x: Key koymayın.

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/mydll;component/folder/MyResDict.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

     <LinearGradientBrush x:Key="OrangeGradient" 
          EndPoint="0.5,1" 
          MappingMode="RelativeToBoundingBox" 
          StartPoint="0.5,0"> 
      <LinearGradientBrush.RelativeTransform> 
       <RotateTransform CenterY="0.5" 
            CenterX="0.5" /> 
      </LinearGradientBrush.RelativeTransform> 
      <GradientStop Color="#FFF3801E" /> 
      <GradientStop Color="#FFEDB17E" 
          Offset="0.5" /> 
      <GradientStop Color="#FFF3801E" 
          Offset="1" /> 
     </LinearGradientBrush> 
    </ResourceDictionary> 
</UserControl.Resources> 

neden açıklayamam - ama çalıştığını biliyorum ...

hth

+1

Hmm, o zaman bu kodla tasarım zamanı hatası almıyorsunuz? – Rodney

+0

Oh hayır ... ama çapraz derlenmiş kod yazmaya başladığımdan yaklaşık 2 hafta sonra VS ve Blend'deki tasarımcılardan vazgeçtim. Onlar sadece çalışmazlar. – chadbr

+0

Tasarımcılar kullanmak istesem, ayrı bir WPF veya Silverlight projesini kullanıyorum, tasarım çalışmamı yapıyorum, daha sonra bunu “gerçek” projeme getirdim ve çapraz derlemeye nasıl ulaşacağımı anladım. Bundan sonra tasarımcıya yüklenecek tasarımı almak imkansızdır. MS tarafından çalıştırılan açık bir bağlantı sorunum var, ancak gerçekten hiçbir yere gitmiyor. – chadbr

0

Ben aynı sorunu karşılaştım.

Sorun, sözlüğün kendisi yerine uygulamanın xaml dosyasındaki sözlük birleştirme tanımlamamı çözdüm.

Ör:

<ResourceDictionary> 

     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources\Brushes\Brushes_Dictionary.xaml" /> 
      <ResourceDictionary Source="Resources\Storyboards\Storyboard_Dictionary.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 

    </ResourceDictionary> 

</Application.Resources> 

+0

Merhaba Scott, çözümüm sizin için işe yaramadı mı? – Rodney

0

Evet, sadece bu tarafından Isırılmışsın. Silverlight birleştirilen kaynak sözlüğünü yükler yüklemez, zaten eklediğiniz tüm yerel kaynakları siler! Benim durumumda, InitalizeComponent() çağrısından önce programsal olarak bir kaynak eklemem gerekiyor, ancak UserControl kaynağın kaybolduğu birleştirilmiş ResourceDictionary içerdiğinden. IMHO bu Silverlight'ta bir hata.

Ancak ResourceDictionary sonra yerel kaynakları koymak sizinki gibi durumlarda çalışacaktır, bu yüzden ben onu oy.

İlgili konular