动态更改隐式样式

时间:2011-09-01 20:22:51

标签: wpf xaml styles

现在我在我的应用程序中有一些隐式设计的TabItems。我想在我的应用程序中添加“夜间模式”并改变我的风格。我应该怎么做呢?

2 个答案:

答案 0 :(得分:2)

您可以使用合并的词典执行此操作。将所有“普通”样式放在字典中,并默认将其添加到应用程序资源中:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Styles/Normal.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后你可以删除当前字典并动态加载另一个字典:

private void ChangeStyles()
{
    App.Current.Resources.MergedDictionaries.Clear();

    StreamResourceInfo resInfo = App.GetResourceStream(new Uri("Styles/NewStyles.xaml", UriKind.Relative));
    XDocument xaml = XDocument.Load(resInfo.Stream);
    ResourceDictionary resource = XamlReader.Load(xaml.ToString()) as ResourceDictionary;

    App.Current.Resources.MergedDictionaries.Add(resource);
}

答案 1 :(得分:1)

阿方索的想法是正确的...... 但是你必须在WPF中这样做。

App.Current.Resources.MergedDictionaries.Clear(); 
Uri uri = new Uri("/Resources/GlassButton5Night.xaml", UriKind.Relative);
var resDict = Application.LoadComponent(uri) as ResourceDictionary;
App.Current.Resources.MergedDictionaries.Add(resDict);

您确保在合适的级别重置MergedDictionaries