gpt4 book ai didi

c# - 交换全局 XAML 样式/主题

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:11 25 4
gpt4 key购买 nike

我的 UI 由一组样式定义。

我想让用户从两种样式中进行选择。

如何在代码隐藏中换出全局样式?

最佳答案

密切关注依赖关系,这样资源就不会尝试引用另一个尚未定义的资源。请参阅有关 Merged Dictionaries 的部分查看什么时候加载了什么。此外,您必须将所有资源从 App.xaml 移动到通用资源字典中,因为当您将应用程序资源重置为新的合并字典时,它们将被清除。

更新似乎只有在重新创建元素时才会生效,因此需要导航才能应用更改。

private void LoadStyles(StyleType styleType)
{
ResourceDictionary merged = new ResourceDictionary();
ResourceDictionary generic = new ResourceDictionary();
ResourceDictionary theme = new ResourceDictionary();

generic.Source = new Uri("ms-appx:/Common/StandardStyles.xaml");

switch (styleType)
{
default:
case StyleType.Custom1: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom1.xaml"); break; }
case StyleType.Custom2: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom2.xaml"); break; }
case StyleType.Custom3: { theme.Source = new Uri("ms-appx:/Common/AppStyles-Custom3.xaml"); break; }
}

merged.MergedDictionaries.Add(generic);
merged.MergedDictionaries.Add(theme);

App.Current.Resources = merged;

//this.ApplyTemplate(); <- doesn't seem to reapply resources to layout tree
}

关于c# - 交换全局 XAML 样式/主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com