2013-08-13 3 views
0

Я создал новый проект, в котором мне нужно будет динамически изменять темы.Динамическая подкачка * Локальный проект * Темы WPF (стили) во время выполнения

Я видел много сообщений об этом, когда вы делаете это через app.xml ..

например Resources.MergedDictionaries.Clear();

Resources.MergedDictionaries.Add(new ResourceDictionary 
    { 
    Source = new Uri(Themes/MyTheme.xaml, UriKind.Relative) 
    }); 

Это прекрасно работает, однако, так как это будет большой проект, и я буду иметь каждый вид в его собственных проектах (например, в соответствии со структурой Prism), я хотел каждый проект, чтобы иметь I «т собственные локальные тематические .xaml файлы, и поменять их (то есть вместо того, чтобы все в главном приложении проекта („Shell“).

Мои примеры проектов можно найти на

https://dl.dropboxusercontent.com/u/30760237/ThemesSwap.zip

в здесь у меня есть помощник, который изменится темы во время выполнения (MainView2.ThemeHelper))

Если вы запустите проект как есть, при нажатии кнопки мы можем удалить старую тему (розовый фон), но новый (черный фон) не нагрузки.

Единственный способ, которым я могу заставить его работать добавляет следующую «ссылку» в файл App.xaml (она закомментирована в прилагаемом)

<ResourceDictionary.MergedDictionaries> 
<ResourceDictionary Source="/MainView2;component/Themes/DarkTheme.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

Мой вопрос, есть ли способ НЕ нужно связывать эти темы в главном проекте и полностью ли они зашиты в каждом из проектов вида? Я не могу понять, почему нам нужно ссылаться на них в основном проекте?

Заранее спасибо за любую помощь

С уважением, Петр

+0

Не смотрите на свой код, но мне любопытно, почему вам нужны темы на уровне модулей. Это похоже на катастрофу пользовательского интерфейса для меня. Я думаю, что для оболочки очень важно диктовать тему, а модули - наследовать ее и переопределять только те биты, в которых они нуждаются. –

+0

Возможно, хороший момент Кент, будет немного больше думать об этом. Cheers – peterc

ответ

0

Кто-то сказал мне ответ на этот вопрос так думал поделиться ..

«Вы должны использовать пакет URI для файл ресурсов, который компилируется в ссылочном сборки:»

т.е. имеет„/ MainView2, компонент“приставка ...

Источник = новый Uri (= "/ MainView2; компонент/Темы/MyTheme.xaml, UriKind.Relative)

Смежные вопросы