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

.NET Framework 4.8 WPF中如何结合DI选项模式使用ResourceDictionary

.NET Framework 4.8 WPF MVVM:ResourceDictionary Style绑定运行时DI配置问题

项目背景

  • 开发基于.NET Framework 4.8的WPF MVVM项目,使用Microsoft.Extensions.Hosting及相关依赖注入(DI)库
  • 已准备简化后的示例项目复现问题
  • 核心需求:在UserControl中引用ResourceDictionary内的Style,且Style的取值由运行时DI提供的配置动态填充

关键代码位置

  • ProjectB\ResourceDictionary.xaml 第13行
  • ProjectC\AnotherControlUserControl.xaml 第44行
  • ProjectA\App.xaml.cs 第28行、第32行
  • ProjectA\appsettings.json 第7行

场景与问题

将十六进制颜色代码存储在appsettings.json中,通过IHost配置加载后,利用Options模式映射到ColorSettings类。Window由嵌套的UserControl组成,部分UserControl通过Host.CreateDefaultBuilder().ConfigureServices(...)注入实例化,部分直接在XAML中实例化(无对应ViewModel)。

当前遇到的问题:AnotherControlUserControl的Rectangle(第44行)绑定Style时,无法正确获取appsettings.json中的颜色值,仅显示白色。

已尝试的解决方案

  • 创建ColorSettingsFactory类,在DI代码中设置其ColorSettings属性,尝试替换ResourceDictionary.xaml中的ColorSettings,但XAML无法实例化无参构造函数的类
  • 尝试多种绑定语法:DynamicResource、StaticResource,以及配置Mode=TwoWay、UpdateSourceTrigger=PropertyChanged等
  • 让ColorSettings实现INotifyPropertyChanged(基于Community Toolkit MVVM的ObservableObject),无效果
  • 在App.xaml.cs中调用startupWindow.UpdateLayout()强制更新UI,无效
  • 找到一种可行但不够优雅的方案:将IOptions<ColorSettings>注入MyDisplayViewModel类,在AnotherControlUserControl的XAML中使用Fill="{Binding ColorSettings.ColorHeader}"。但该方案不符合需求:希望将所有Style定义集中在ResourceDictionary.xaml统一管理,且不想向ViewModel注入大量IOptions<...>实例
  • 参考多篇Stack Overflow帖子尝试解决,未找到合适方案

期望目标

当DI容器中的ColorSettings更新时,ResourceDictionary.xaml中的对应值同步更新,并自动反映到所有引用该Style的控件上,解决DI容器与XAML之间的状态脱节问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 03:16:16