2010-06-11 11 views
7

Ich habe eine Anwendung entwickelt, mit der der Benutzer zwischen Themen wechseln kann. Ich dies tun, indem Sie die XAML-Datei als Ressource in meinem Projekt einschließlich und mit dem folgenden Code:Verwenden Sie ein Ressource-Wörterbuch als Thema in Silverlight

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

Das funktionierte gut, bis ich diese Themen gefunden: http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx

Der Unterschied besteht darin, dass diese Themen bestehen aus mehreren Dateien. Also habe ich eine Theme.xaml-Datei erstellt, die nur MergedDictionaries enthält, damit ich den obigen Code immer noch verwenden kann. Dies ist die Theme.xaml-Datei für das Cosmopolitan-Thema.

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

Allerdings, wenn ich die C# Code ausführen oben ich die folgende Ausnahme erhalten:

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

Nur klar zu sein, die MergedDictionaries Methode funktioniert, wenn ich stellte es in meiner App.xaml:

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

Was mache ich falsch?

Danke!

+0

Einstellung absolute Pfade in meiner Theme.xaml Datei wie funktioniert auch nicht :( – SaphuA

+0

hatte ich ein ähnliches Problem und die Ursache war ein umgekehrter Schrägstrich (\) anstelle von Schrägstrich (/) beim Verweisen auf die Datei.Der XAML-Parser in VS konnte den Speicherort auflösen, aber zur Laufzeit wurde ein Fehler generiert.Hoffentlich hilft dies jemand anderem out. –

Antwort

10

Wenn Sie MergedDictionary verwenden, müssen Sie den vollständig qualifizierten Namen wie unten verwenden.

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

Beachten Sie auch, dass Sie den Schrägstrich vor dem Assemblynamen nicht verpassen sollten. Mit anderen Worten, sollte es wie

Source="/SilverlightApplication1; 

nicht

Source="SilverlightApplication1; 

HTH

+5

nicht müssen Sie "Komponente" achtern er den Assemblynamen "/SilverlightApplication1;component/Themes/Cosmopolitan/Theme.xaml" – user20358

+0

Ja, Sie sollten Komponente setzen. Das ist richtig. – Lance

+1

@Prince: Der Bestandteil ist wichtig. Bitte denken Sie daran, Ihre Antwort zu aktualisieren. Es wird eine gute Antwort nach diesem Update sein. –

Verwandte Themen