Problemy z odniesieniem do słownika zasobów zawierającego scalony słownik
Mam bibliotekę CommonLibraryWpfThemes z kilkoma plikami XAML słownika zasobów. Plik Moje motywy / Generic.xml zawiera deklarację ResourceDictionary.MergedDictionaries, która łączy wszystkie pozostałe pliki razem.
Generic.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/BrushDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/TextBlockDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/LabelDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/ButtonDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
W moim projekcie aplikacji mam odwołanie do CommonLibraryWpfThemes i wyraźnie odwołuję się do Generic.xml w moim pliku App.xaml.
App.xaml - FAILS
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml" />
</Application.Resources>
</Application>
To nie działa. Podczas uruchamiania aplikacji pojawia się następujący błąd:
System.Windows.Markup.XamlParseException occurred
Message="Cannot find resource named '{_fadedOrangeBrush}'. Resource names are case sensitive. Error at object 'System.Windows.Setter' in markup file 'CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml' Line 18 Position 13."
Source="PresentationFramework"
LineNumber=18
LinePosition=13
Jeśli umieścisz zawartość Generic.xaml bezpośrednio w App.xaml, wszystko działa dobrze:
App.xaml - SUCCEEDS
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/BrushDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/TextBlockDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/LabelDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/ButtonDictionary.xaml" />
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/ResourceDictionaries/WindowDictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
Może o tym mówię w niewłaściwy sposób. Moim celem jest ułatwienie odwoływania się do wszystkich moich zasobów tematycznych z wielu aplikacji bez konieczności wypisywania wszystkich pojedynczych plików. Czy istnieje zalecany sposób, aby to zrobić? (Uwaga: nie próbuję przełączać się między wieloma motywami - mam tylko jeden motyw).
Jako bonus, byłoby miło, gdyby ktoś mógł mi powiedzieć, jak odwoływać się do zasobów w zewnętrznej bibliotece bez zrywania projektanta w Visual Studio.
Dzięki.
EDYTOWAĆ:
Próbowałem zawinięcia ResourceDictionary w elemencie ResourceDictionary.MergedDictionary, ale to również nie zadziałało (otrzymuję ten sam błąd):
<Application
x:Class="MyApp.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/CommonLibraryWpfThemes;component/Themes/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>