2010-06-11 36 views
7

'da tema olarak bir kaynak sözlüğü kullanın Kullanıcının temalar arasında geçiş yapmasına izin veren bir uygulama geliştirdim. e kadar ben bu temaları buldum,Silverlight

MainTheme.ThemeUri = new Uri("SilverlightApplication1;component/Themes/[ThemeName]/Theme.xaml", UriKind.Relative); 

Bu iyi çalıştı: Projemde bir kaynak olarak xaml dosyası dahil ve aşağıdaki kodu kullanarak yapıyorum http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx

fark, bu temalar olmasıdır Birden çok dosyadan oluşur. Bu yüzden, sadece yukarıdaki kodu kullanabilmem için birleştirilmiş MergedDictionaries içeren bir Theme.xaml dosyası yaptım. Bu Cosmopolitan teması için Theme.xaml dosyasıdır. Ben C# kodu çalıştırdığınızda

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="CoreStyles.xaml"/> 
     <ResourceDictionary Source="SDKStyles.xaml"/> 
     <ResourceDictionary Source="Styles.xaml"/> 
     <ResourceDictionary Source="ToolkitStyles.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Ancak, şu istisna olsun yukarıda:

System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.ResourceDictionary.Source'. 

Sadece MergedDictionaries yöntemi kullanılarak, açık olmak gerekirse yaptığı işlerde benim App.xaml bunu ayarladığınızda:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

Neyi yanlış yapıyorum?

Teşekkürler!

+0

çalışmıyor :( – SaphuA

+0

Ayrıca benim Theme.xaml dosyasında mutlak yollarını ayarlama gibi gibi olmalıdır ve neden dosya başvuru yaparken eğik çizgi (/) yerine bir ters eğik çizgi (\) kullanıyordu. VS'deki xaml ayrıştırıcısı konumu çözebiliyordu, ancak çalışma zamanında bir hata oluşuyordu. Umarım bu başka birine yardımcı olur. –

cevap

10

MergedDictionary'ı kullanırken, aşağıdaki gibi tam nitelikli ad kullanmanız gerekir.

<ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml"/> 

Ayrıca, montaj isminden önce eğik çizgiyi kaçırmamalısınız. Başka bir deyişle,

Source="/SilverlightApplication1; 

değil ben benzer bir sorun vardı

Source="SilverlightApplication1; 

HTH

+5

'bileşen' aft koymak zorunda değilsiniz montaj adı "/SilverlightApplication1 ;component/Themes/Cosmopolitan/Theme.xaml" – user20358

+0

Evet, bileşeni yerleştirmelisiniz. Bu doğru. – Lance

+1

@Prince: Bileşen kısmı önemlidir. Lütfen cevabınızı güncellemeyi düşünün. Bu güncellemeden sonra harika bir cevap olacak. –