2009-10-30 10 views
7

Czy możliwe jest odwoływanie się do zasobów Xaml przechowywanych w pliku ResourceDictionary (build action = resource) z innego projektu? Chciałbym połączyć zasoby w słowniku zasobów głównego projektu lub uzyskać do nich dostęp indywidualny. Na przykład:Uzyskiwanie dostępu do zasobów w Xaml w ramach projektów/bibliotek dll

  • projektu "MyResources" zawiera folder o nazwie "Aktywa", który ma ResourceDictionary nazwie "MyAssets.xaml", który zawiera styl zwany "ButtonStyle"
  • Project "MainProject" referencje MyResources; w MainWindow.xaml

W MainWindow.xaml chciałbym zrobić coś takiego:

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

Lub, jeśli nie jest to możliwe, być może:

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

Czy istnieje sposób odnosić się do rzeczy w MyResources z MainProject?

Odpowiedz

13

Według ResourceDictionary in a separate assembly

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

Dziękuję, moje poszukiwania powinny to zmienić. To jest dupek. –

3

można scalić środków z projektu do głównego słownika za pomocą tej metody:

/// <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); 
    } 
} 

nazwać to tak:

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

Dzięki za udzielenie odpowiedzi na podstawie kodu, gdybym mógł zaznaczyć drugą odpowiedź, bym to zrobił! –

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

Gdzie:

fotografia to nazwa projektu zewnętrznego

/Themes/TreeStyle.xaml odpowiada lokalizacji pliku stylu w projekcie fotografia

; składnikiem jest zawsze wymagane:

+1

Dzięki za wyjaśnienie KAŻDEGO PIECA układanki ... +1 –

Powiązane problemy