2009-10-30 8 views
7

Ist es möglich, Xaml-Assets, die in einem ResourceDictionary (Build action = resource) gespeichert sind, von einem anderen Projekt aus zu referenzieren? Ich möchte die Assets entweder in das Ressourcenwörterbuch des Hauptprojekts zusammenführen oder auf sie zugreifen. Zum Beispiel:Zugreifen auf Ressourcen in Xaml über Projekte/DLLs

  • Projekt „MyResources“ enthält einen Ordner „Assets“ genannt, die eine Resource „MyAssets.xaml“ genannt hat, die einen Stil namens „Button“
  • Projekt „Hauptprojekt“ Referenzen MyResources enthält; in MainWindow.xaml

In MainWindow.xaml würde Ich mag, wie etwas zu tun ist: vielleicht

<ResourceDictionary.MergedResources> 
    <ResourceDictionary Source="/MyResources/Assets/MyAssets.xaml"/> 
</ResourceDictionary.MergedResources> 

Oder, wenn das nicht möglich ist,:

<Button Style="{StaticResource /MyResources/Assets/MyAssets.xaml}"/> 

Gibt es eine Möglichkeit auf Zeug in MyResources von MainProject beziehen?

Antwort

13

Nach ResourceDictionary in a separate assembly

<ResourceDictionary.MergedResources> 
    <ResourceDictionary Source="pack://application:,,,/YourAssembly;component/Subfolder/YourResourceFile.xaml"/> 
</ResourceDictionary.MergedResources> 
+0

Danke, meine Suche hätte das aufdrehen sollen. Das ist ein Betrogener. –

3

Sie die Ressourcen aus dem Projekt in Ihrem Hauptwörterbuch fusionieren können mit dieser Methode:

/// <summary> 
/// Loads a resource dictionary from a URI and merges it into the application resources. 
/// </summary> 
/// <param name="resourceLocater">URI of resource dictionary</param> 
public static void MergeResourceDictionary(Uri resourceLocater) 
{ 
    if (Application.Current != null) 
    { 
     var dictionary = (ResourceDictionary) Application.LoadComponent(resourceLocater); 
     Application.Current.Resources.MergedDictionaries.Add(dictionary); 
    } 
} 

es so Aufruf:

MergeResourceDictionary(new Uri(@"/MyOtherAssembly;component/MyOtherResourceDictionary.xaml", UriKind.Relative));               
+0

Danke für die Bereitstellung einer Code-basierten Antwort, wenn ich eine zweite Antwort hätte markieren können! –

11
<ResourceDictionary Source="/Commons;component/Themes/TreeStyle.xaml" /> 

Wo:

Commons der Name des externen Projekt

/Themes/TreeStyle.xaml an der Stelle der Style-Datei in Projekt Commons

entspricht ist; Komponente ist immer erforderlich

+1

Danke für die Erklärung jedes Stück des Puzzles ... +1 –

Verwandte Themen