Opracowałem aplikację, która pozwala użytkownikowi przełączać się między tematami. Robię to poprzez włączenie pliku XAML jako zasób w moim projekcie i przy użyciu następującego kodu:Skorzystaj ze słownika zasobów jako motywu w Silverlight
MainTheme.ThemeUri = new Uri("SilverlightApplication1;component/Themes/[ThemeName]/Theme.xaml", UriKind.Relative);
To działało dobrze, aż znalazłem te tematy: http://timheuer.com/blog/archive/2010/05/17/silverlight-4-tools-released-and-new-application-templates.aspx
Różnica polega na tym, że te tematy składają się z wielu plików. Zrobiłem więc plik Theme.xaml, który zawiera tylko MergedDictionaries, więc nadal mógłbym użyć powyższego kodu. To jest plik Theme.xaml dla kompozycji Cosmopolitan.
<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>
Jednak, kiedy uruchomić kod C# powyżej pojawia się następujący wyjątek:
System.Windows.Markup.XamlParseException: Failed to assign to property 'System.Windows.ResourceDictionary.Source'.
żeby była jasność, stosując metodę MergedDictionaries działa kiedy ustawić go w moim App.xaml:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Cosmopolitan/Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Co robię źle?
Dzięki!
Ustawianie ścieżki bezwzględne w moim pliku Theme.xaml też nie działa :( – SaphuA
miałem podobny problem a przyczyną było użycie odwrotnego ukośnika (\) zamiast ukośnika (/) podczas odwoływania się do pliku. Analizator składni xaml w VS był w stanie rozwiązać lokalizację, ale w czasie wykonywania generowany był błąd. Mam nadzieję, że to pomoże komuś innemu –