You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3/UWP如何编程增删资源字典及解决修改不生效问题

WinUI 3/UWP 动态增删资源字典不生效的解决方案

核心原因

UWP/WinUI 与 Xamarin Forms 的资源逻辑存在两处差异导致代码不生效:

  1. 带x:Class声明的自定义资源字典,必须在后台代码的构造函数中调用InitializeComponent(),否则XAML中定义的样式、资源不会被加载到实例中
  2. 已完成渲染的控件,默认会缓存已解析的隐式样式,全局资源字典新增的隐式样式不会自动触发已有控件的样式重绘

修正步骤

1. 补全自定义资源字典的后台逻辑

打开UserResourceDictionary.xaml.cs文件,在构造函数中添加初始化逻辑:

namespace UWPTestApp2.Resources
{
    public sealed partial class UserResourceDictionary : ResourceDictionary
    {
        public UserResourceDictionary()
        {
            // 必须添加此行,加载XAML文件中定义的所有资源
            InitializeComponent();
        }
    }
}

2. 优化动态增删逻辑

资源字典实例建议复用,避免重复创建和添加;新增资源后手动清除控件的样式缓存,触发重新查询资源树:

// 将资源字典实例声明为页面全局字段,复用实例
private UserResourceDictionary _userResourceLibrary = new UserResourceDictionary();

private void Button1_Click(object sender, RoutedEventArgs e)
{
    // 避免重复添加抛出异常
    if (!Application.Current.Resources.MergedDictionaries.Contains(_userResourceLibrary))
    {
        Application.Current.Resources.MergedDictionaries.Add(_userResourceLibrary);
    }
    // 清除按钮已缓存的样式,强制重新读取最新资源
    Button1.ClearValue(Button.StyleProperty);
}

如果需要删除资源字典恢复默认样式,使用以下逻辑:

private void RemoveStyleButton_Click(object sender, RoutedEventArgs e)
{
    if (Application.Current.Resources.MergedDictionaries.Contains(_userResourceLibrary))
    {
        Application.Current.Resources.MergedDictionaries.Remove(_userResourceLibrary);
    }
    // 清除样式缓存,恢复系统默认样式
    Button1.ClearValue(Button.StyleProperty);
}

可选优化方案

如果需要全局所有同类型控件都自动应用新样式,可以给样式添加x:Key,新增资源后遍历对应控件手动赋值样式,稳定性高于隐式样式:
修改资源字典中的样式声明:

<Style x:Key="CustomOrangeButton" TargetType="Button">
    <Setter Property="Background" Value="Orange"/>
    <Setter Property="Width" Value="40"/>
    <Setter Property="Height" Value="40"/>
    <Setter Property="Content" Value="Default"/>
    <Setter Property="FontSize" Value="6"/>
</Style>

新增资源后手动赋值样式:

Button1.Style = Application.Current.Resources["CustomOrangeButton"] as Style;

内容的提问来源于stack exchange,提问作者chuckp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:02