在WPF中更改皮肤

时间:2020-07-31 09:55:53

标签: c# wpf xaml

嗨,我有一个wpf项目,这是我项目的结构

Themes\Basic\Colors\Colors.xaml
Themes\Basic\Colors\ColorsDark.xaml
Themes\Basic\Converters.xaml
Themes\Basic\Geometries.xaml
Themes\Basic\Basic.xaml

basic.xaml 包括这些项目

<ResourceDictionary.MergedDictionaries>

    <themes:SharedResourceDictionary Source="pack://application:,,,/myproject;component/Themes/Basic/Converters.xaml"/>
    <themes:SharedResourceDictionary Source="pack://application:,,,/myproject;component/Themes/Basic/Geometries.xaml"/>
</ResourceDictionary.MergedDictionaries>

Themes\Styles\Button.xaml
Themes\Styles\Label.xaml
Themes\Styles\Style.xaml

style.xaml 包括了这些项目

  <ResourceDictionary.MergedDictionaries>
    
        <themes:SharedResourceDictionary Source="pack://application:,,,/myproject;component/Themes/Styles/Button.xaml"/>
        <themes:SharedResourceDictionary Source="pack://application:,,,/myproject;component/Themes/Styles/Label.xaml"/>
    </ResourceDictionary.MergedDictionaries>

和 Themes \ SkinDefault.xaml ===>包括 Colors.xaml

Themes \ SkinDark.xaml ===>包括 ColorsDark.xaml

Themes \ Theme.xaml ===>包括 Style.xaml Basic.xaml

现在我可以在演示中使用我的项目了,

<ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/myproject;component/Themes/SkinDefault.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/myproject;component/Themes/Theme.xaml"/>
            </ResourceDictionary.MergedDictionaries>

我的问题是我无法在运行时更改程序的外观,我使用了以下代码,并且似乎清除了与主题相关的资源

Application.Current.Resources.Source = new Uri($"pack://application:,,,/myproject;component/Themes/Skin{skin}.xaml", UriKind.Absolute);

或这个:

Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary{
   Source = new Uri($"pack://application:,,,/myproject;component/Themes/Skin{skin}.xaml);
});
            Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary
            {
                Source = new Uri("pack://application:,,,/myproject;component/Themes/Theme.xaml", UriKind.Absolute)
            });

它什么也不做,外壳也不会改变

0 个答案:

没有答案
相关问题