Буквально месяц назад начал изучение Silverlight 4 на примере простеньких приложений.
И очень мне понравилось, как можно расширять визуальные стили у любых XAML элементов. Но так как художник-дизайнер из меня никакой, было решено воспользоваться готовыми темами из Silverlight Toolkit, тем более они довольно приятны.
Хочу заметить, что Silverlight Toolkit и раньше поддерживал темы. А теперь Silverlight 4 их поддерживает из коробки (хороший пример ситуации когда отдельные части Open Source проекта попадают в основную ветку MS технологий).
Подключить тему в принципе очень просто, но встречается несколько подводных камней, в основном из-за сырости Silverlight Tools на данный момент.
Первое что нам понадобится – это скачать сам Silverlight Toolkit.
Далее идём в папку “C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Toolkit\Feb10\Themes\Xaml”.
Путь может быть другим в зависимости от настроек системы и даты релиза Toolkit.
В папке мы видим набор Xaml файлов:
Выбираем тему себе по душе и копируем в папку с программой.
Далее обязательно надо поставить ей Build Action в Content:
В интернете большинство советов сводится к подключению нашего Xaml файла с темой на этапе запуска приложения:
21 ResourceDictionary rd = new ResourceDictionary();
22 //Load resourse dictonary
23 rd.Source = new Uri("System.Windows.Controls.Theming.ShinyBlue.xaml", UriKind.RelativeOrAbsolute);
24 //Clear previous styles if any...
25 App.Current.Resources.MergedDictionaries.Clear();
26 //Add the loaded resource dictionary to the application merged dictionaries
27 App.Current.Resources.MergedDictionaries.Add(rd);
Но мне кажется, тут проще сделать декларативно:
6 <Application.Resources>
7 <ResourceDictionary>
8 <ResourceDictionary.MergedDictionaries>
9 <ResourceDictionary Source="/Themes/ExpressionDark.xaml" />
10 <ResourceDictionary Source="Styles.xaml"/>
11 </ResourceDictionary.MergedDictionaries>
12 </ResourceDictionary>
13 </Application.Resources>
Далее настоятельно стоит не забыть подключить Toolkit сборки в Reference.
Если этого не сделать, можно потратить несколько часов на поиски решения, так как генерируется очень немногословная ошибка :)

И финальный результат:
Всё в итоге довольно просто!