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

WinUI3:动态内容UserControl如何在代码后台实现ThemeResource主题切换?

解决WinUI3后台代码等效{ThemeResource}的问题

问题根源

你当前代码的两个核心问题:

  1. 笔误:Resources["BorderBrush1"]应为Resources["BorderBrush"],但即使修正,直接通过Resources索引获取资源也不会考虑当前UserControl的RequestedTheme上下文,无法匹配XAML中{ThemeResource}的动态主题切换效果。
  2. 未监听主题变化的自动更新逻辑,仅手动在按钮点击时调用更新,场景覆盖不全。

解决方案

使用FrameworkElement.FindResource方法替代直接索引Resources,该方法会根据当前元素的RequestedTheme上下文查找对应主题字典中的资源,完全等效于XAML中的{ThemeResource}语法;同时监听RequestedThemeChanged事件,确保主题变化时自动更新动态元素的资源。

修改后的C#代码

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Input;
using Microsoft.UI.Xaml.Media;

namespace TestWinUI3App
{
    public sealed partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            UpdateBrush();
            // 监听主题变更事件,自动触发资源更新
            RequestedThemeChanged += UserControl1_RequestedThemeChanged;
        }

        private void UserControl1_RequestedThemeChanged(FrameworkElement sender, object args)
        {
            UpdateBrush();
        }

        private void Button_Tapped(object sender, TappedRoutedEventArgs e)
        {
            RequestedTheme = RequestedTheme == ElementTheme.Dark ? ElementTheme.Light : ElementTheme.Dark;
        }

        private void UpdateBrush()
        {
            // 通过FindResource获取当前主题对应的资源,等效于{ThemeResource}
            if (FindResource("BorderBrush") is SolidColorBrush brush)
            {
                Border.BorderBrush = brush;
            }
        }
    }
}

动态生成元素的适配

如果是动态创建的元素,同样可以用FindResource设置资源:

// 动态创建Border
var dynamicBorder = new Border { BorderThickness = new Thickness(1) };
if (FindResource("BorderBrush") is SolidColorBrush brush)
{
    dynamicBorder.BorderBrush = brush;
}
// 将元素添加到布局容器
stackPanel.Children.Add(dynamicBorder);

截图强制Light主题的补充

当需要截图时,只需将UserControl的RequestedTheme设置为ElementTheme.Light,RequestedThemeChanged事件会自动触发UpdateBrush,所有动态元素都会切换到Light主题下的资源,满足截图需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:50:25