【wpf】ResourceDictionary 字典资源的用法

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

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

C# 进行调用

csharp 复制代码
Style x = App.Current.Resources["RoundedRectangle"]; 

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

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

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

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

xml 复制代码
<!-- 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 中,你可以在非启动项目的代码中直接加载并使用它:

csharp 复制代码
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 中引用该资源字典:

xml 复制代码
<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,并直接在代码中使用资源字典。

相关推荐
zhanghaha13141 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
2601_9679873715 小时前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
Coder_Shenshen16 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
samble18 小时前
从零搭建半导体设备上位机(九):拖拽与交互,Adorner、DragDrop 与晶圆拖放信息
wpf·拖拽·adorner
xbzb20 小时前
自定义 yum 软件源:Linux 上 createrepo,Windows 上纯 Python 也能造
linux·运维·windows·python·yum·createrepo
武雄(小星Ai)20 小时前
Ollama报llama-server binary not found排坑实录:服务活着引擎没了
人工智能·windows·大模型·ollama·排坑
寂寞的船1 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=01 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
叼烟扛炮1 天前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
Thneonl2 天前
桌宠穿透不是一行 SetWindowLong
windows·程序员