WPF创建单独资源库并在应用中引用

主要目的:

1.如何把WPF中的资源集中管理放到单独的程序集中,方便资源共享

2.主应用如何引用资源库中资源

  

  废话不多说:

  1.创建WPF类库(WPFTest.Res)作为资源库并创建相应文件,如下图(创建WPFUI类库把不需要的删除也可以)

  

  2.创建类型 MyResource.cs 目前这个类除了改成Public外不需要添加其它代码

  3.编写Themes/generic.xaml中的内容 注意的是x:key中的内容在Vs2013智能提示不出来,直接照打即可 ComponentResourceKey 用于定义 组件的资源键,指定ResourceId 有点注意的是 在根节点引用相应项目的命名空间 xmlns:local="clr-namespace:你的项目名称",图片等资源文件“生成操作”需要指定为“资源(Resource)”,可能ImageSource等引用中会在编辑器中提示找不到文件,但只要符合规定来设置不影响使用

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:WPFTest.Res">
    <ImageBrush x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:MyResource},ResourceId=SadTitleBrush}"
                TileMode="Tile"
                ImageSource="WPFTest.Res;component/Img/timg.jpg">
    </ImageBrush>
    <SolidColorBrush x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:MyResource},ResourceId=MyColorBrush}"
                     Color="Blue">
    </SolidColorBrush>
</ResourceDictionary>

  4.MyResource.cs中添加以下静态变量简化资源引用

    public static class MyResource
    {
        public static ComponentResourceKey MyColorBrushKey
        {
            get
            {
                return new ComponentResourceKey(
                    typeof(MyResource), "MyColorBrush");
            }
        }

        public static ComponentResourceKey SadTitleBrushKey
        {
            get
            {
                return new ComponentResourceKey(
                    typeof(MyResource), "SadTitleBrush");
            }
        }
    }

  5.创建一个空白的WPF项目,并添加资源类库的引用 打开 MainWindow.xaml 添加以下代码引用资源库内的资源。引用资源前需要根据项目设置引用的命名空间  xmlns:res="clr-namespace:资源库命名空间;assembly=资源库程序集名称"

<Window x:Class="WPFTest.ResHost.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:res="clr-namespace:WPFTest.Res;assembly=WPFTest.Res"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <Button Content="测试" Background="{DynamicResource {x:Static res:MyResource.MyColorBrushKey}}" ></Button>
        <Button Content="测试2" Background="{DynamicResource {x:Static res:MyResource.SadTitleBrushKey}}"></Button>
    </StackPanel>
</Window>

最终效果:

示例代码下载:

https://files.cnblogs.com/files/nekoyzx/WPFTest.Res.7z

时间: 2024-12-13 21:47:28

WPF创建单独资源库并在应用中引用的相关文章

kettle 创建数据库资源库

kettle常见的资源库有3种:数据库资源库.文件资源库.pentaho资源库. 文件资源库是在一个文件目录下定义一个资源库,因为kettle使用的是虚拟文件系统(Apache VFS),所以这里的文件目录是一个广泛的概念,包括了zip文件.web服务.FTP服务. pentaho资源库是一个插件(kettle企业版中有),实际是一个内容管理系统(CMS),它具备一个理想的资源库的所有特性,包括版本控制和依赖完整性检查. 数据库资源库是把所有的ETL信息保存在关系型数据库中,包括数据库连接.转换

利用WPF创建含多种交互特性的无边框窗体

咳咳,标题一口气读下来确实有点累,让我先解释一下.另外文章底部有演示程序的下载. 本文介绍利用WPF创建一个含有以下特性的窗口: 有窗口阴影,比如QQ窗口外围只有几像素的阴影: 支持透明且无边框,为了自行美化窗口通常都会想到使用无边框窗口吧: 可正常最大化,WPF无边框窗口直接最大化会直接使窗口全屏即会将任务栏一并盖住: 窗口边缘改变窗口大小,可以拖动窗口边缘改变大小: 支持等同于标题栏的全窗口空白区拖动,这一特性可以参考QQ: 支持多显示器环境. 上述针对无边框窗口的特性均可以独立实现,本文将

真正的Derby新手教程,Derby安装,创建数据库,在Java程序中使用Derby

1,下载并安装Derby: 下载地址:http://db.apache.org/derby /derby_downloads.html,下载最新版本. 我用的是10.5.3.0. 解压缩到任意文件夹,我的是:E:\Java\Joy\derby 2,配置环境变量: 建立DERBY_HOME,值:E:\Java\Joy\derby\db- derby-10.5.3.0-bin\db-derby-10.5.3.0-bin 在Path加入:%DERBY_HOME%\bin 在CLASSPATH加入:%D

Java集合-5. (List)已知有一个Worker 类如下: 完成下面的要求 1) 创建一个List,在List 中增加三个工人,基本信息如下: 姓名 年龄 工资 zhang3 18 3000 li4 25 3500 wang5 22 3200 2) 在li4 之前插入一个工人,信息为:姓名:zhao6,年龄:24,工资3300 3) 删除wang5 的信息 4) 利用for 循

第六题 5. (List)已知有一个Worker 类如下: public class Worker { private int age; private String name; private double salary; public Worker (){} public Worker (String name, int age, double salary) { this.name = name; this.age = age; this.salary = salary; } public

WPF - 为什么不能往Library的工程中添加WPF window

项目中添加一个Library 工程,但是却无法加入WPF window, WPF customize control. 调查了一下,发现这一切都由于Library工程中没有:ProjectTypeGuids <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="

delegate 集成在类中,还是单独写在.h文件中?

转:http://stackoverflow.com/questions/11382057/declaring-a-delegate-protocol There definitely are subtle differences. If the protocol you are talking about is a delegate that is used by one particular class, for example, MySpecialViewController, and M

AIX中创建的裸设备即AIX中的逻辑卷 for Oracle

AIX中创建的裸设备即AIX中的逻辑卷 创建方法如下: 语法:mklv -t raw -y [lvname] [vgname] [LPs] 例如在创建Oracle所需的裸设备: mklv -t raw -y lv_sysaux datavg 3 mklv -t raw -y lv_systems aux datavg 3 mklv -t raw -y lv_ctl1 datavg 1 mklv -t raw -y lv_ctl2 datavg 1 mklv -t raw -y lv_redo1

【C#/WPF】保存BitmapImage数据到文件中

原文:[C#/WPF]保存BitmapImage数据到文件中 参考: http://stackoverflow.com/questions/35804375/how-do-i-save-a-bitmapimage-from-memory-into-a-file-in-wpf-c /// <summary> /// 把内存里的BitmapImage数据保存到硬盘中 /// </summary> /// <param name="bitmapImage">

创建在类路径资源[applicationcontext]中定义名为“工厂”的bean时出错。:在设置bean属性“dataSource”时,无法解析对bean“dataSource”的引用;嵌套异常是org.springframe .beans.factory。BeanCreationException:创建名为“数据源”的bean时出错,该名称是在类路径资源[applicationcontext

控制台报错: 创建在类路径资源[applicationcontext]中定义名为"工厂"的bean时出错.:在设置bean属性"dataSource"时,无法解析对bean"dataSource"的引用;嵌套异常是org.springframe .beans.factory.BeanCreationException:创建名为"数据源"的bean时出错,该名称是在类路径资源[applicationcontext]中定义的.:设