当前位置: 首页 > article >正文

【wpf】ResourceDictionary 字典资源的用法

如果你的字典资源是写在启动项目的App.xaml里

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourNonStartupProject;component/Resources/SharedResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

C# 进行调用

Style x = App.Current.Resources["RoundedRectangle"]; 

如何引用非启动项目的资源

1. 在非启动项目中定义资源

假设你在非启动项目中有一个 ResourceDictionary,你可以像下面这样在 XAML 文件中定义一个资源。

例如,在非启动项目的 Resources/SharedResources.xaml 文件中定义资源:

<!-- SharedResources.xaml -->
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="RoundedRectangle" Color="Red"/>
</ResourceDictionary>

2. 在非启动项目中直接引用和使用资源

要在非启动项目的代码中直接使用这些资源,可以通过加载 ResourceDictionary 来实现。你可以在任何地方加载和使用它,只要该项目已引用资源字典所在的项目。

例如,如果你有一个 RoundedRectangle 资源在 SharedResources.xaml 中,你可以在非启动项目的代码中直接加载并使用它:

var resourceDictionary = new ResourceDictionary
{
    Source = new Uri("pack://application:,,,/YourNonStartupProject;component/Resources/SharedResources.xaml")
};

var roundedRectangle = resourceDictionary["RoundedRectangle"] as SolidColorBrush;

这里的 YourNonStartupProject 是非启动项目的名称,Resources/SharedResources.xaml 是资源文件的路径。

在启动项目中引用非启动项目的资源

如果你希望启动项目能够访问非启动项目中的资源字典,你需要确保启动项目引用了非启动项目,并且在启动项目的 App.xaml 中引用该资源字典:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/YourNonStartupProject;component/Resources/SharedResources.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后,你就可以在启动项目中使用 App.Current.Resources["RoundedRectangle"] 来访问该资源。

总结

  • 你可以在非启动项目中直接创建资源字典并引用它。
  • 如果要在非启动项目中使用资源,可以通过代码动态加载该资源字典。
  • 如果要让启动项目访问非启动项目的资源,可以在启动项目的 App.xaml 中合并该资源字典。

这种方式可以避免依赖于 App.Current,并直接在代码中使用资源字典。


http://www.kler.cn/a/387157.html

相关文章:

  • 期权懂|期权新手入门教学:期权合约有哪些要素?
  • Qwen2 系列大型语言模型
  • 吾店云介绍 – 中国人的WordPress独立站和商城系统平台
  • WorkFlow源码剖析——Communicator之TCPServer(下)
  • AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战
  • [HNCTF 2022 Week1]ret2shellcode-好久不见12
  • 系统架构师2023版:习题
  • 七大AI知识库工具概览
  • 搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
  • Windows10 下通过 Visual Studio2022 编译 openssl 3.4
  • go语言使用总结(持续更新)
  • 前端开发利器:npm 软链接
  • MYSQL-显示错误信息ERRORS 的语句(十七)
  • 软件项目整体实施方案,从立项到交付验收完整过程实施方案,软件实施方案(word原件)
  • [241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5
  • 【MATLAB代码】二维平面上的TDOA,使用加权最小二乘法,不限制锚点数量,代码可复制粘贴
  • 24-11-9-读书笔记(三十二)-《契诃夫文集》(六)上([俄] 契诃夫 [译] 汝龙)药品是甜的,真理是美的,咖啡是苦的,生活是什么啊?
  • 【ChatGPT】如何通过问题链条优化ChatGPT的思维逻辑
  • 高效共享出行:基于SpringBoot的汽车管理系统
  • MySQL之索引(1)(索引概念与作用、红黑树、b树、b+树)(面试高频)
  • A12S25-A2-RH,A12A35-A2-RH 安霸ABMBRELLA 图像传感器汽车记录主控芯片 在售
  • Linux中.NET读取excel组件,不会出现The type initializer for ‘Gdip‘ threw an exception异常
  • 【51单片机输出50ms与200ms方波】
  • Mysql命令大全
  • C#实现在windows上实现指定句柄窗口的指定窗口坐标点击鼠标左键和右键的详细情况
  • 【功能介绍】信创终端系统上各WPS版本的授权差异