zoukankan      html  css  js  c++  java
  • WPF中资源引用方式汇总

      在WPF应用程序开发中,总是难以记住各种访问资源的方法,遂逐一记下。

      先从资源是否编译到程序集分类

      一.程序集资源

        资源在编译的时候嵌入到程序集中。WPF中的XAML会被编译为BAML,图片等其他资源均被编译到程序集中AssemblyResources.g.resources中

               

        为了能够成功使用程序集资源,需要注意一下两点:

    • 资源的Build Action必须是Resource,不复制到输出目录。
    • 不要在Project Properties中使用Resource选项卡,WPF不支持这种类型的资源URI。

        使用资源

        可以在XAML中使用如下方式使用资源

        

    <Image Source="Image/yun.png"></Image>

        也可以使用代码,不过这里有相对路径和绝对路径之分

    img.Source=new BitmapImage(new Uri(@"E:PhotoImageyun.png"));
    
    img.Source=new BitmapImage(new Uri("Image/yun.png",UriKind.Relative));

        但在实际项目中,资源总在另外一个程序集中,那么就需要跨程序集访问资源。语法如下:

        pack://application:,,,/AssemblyName;Component/ResourceName

        首先要引用具有资源的程序集

        在XAML中如下使用

    <Grid>
            <Grid.Background>
                <ImageBrush ImageSource="pack://application:,,,/Controls;Component/Image/yun.png"></ImageBrush>
            </Grid.Background>
        </Grid>

        在代码中也是同样的使用方式

    img.Source=new BitmapImage(new Uri("pack://application:,,,/Controls;Component/Image/yun.png"));

        另外就是资源字典的使用,一个资源字典中可以包含程序中需要使用的样式,画笔等等,资源文件也可再包含资源文件

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary.xaml"></ResourceDictionary>
            <ResourceDictionary Source="Dictionary2.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
        <Style x:Key="btnStyle" TargetType="Button">
            <Setter Property="Background">
                <Setter.Value>
                    <ImageBrush ImageSource="Image/yun.png"></ImageBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </ResourceDictionary>

        如果程序需要使用到换肤功能的话,那么最好由Application来加载统一的资源字典,这样实现换肤功能的话,其实就是将Application下的这一套资源换成另一套,唯一的弊端就是,在vs中看不到已经使用的样式,只有运行起来才能看到。控件换肤也是同样的道理。可以看下下面的例子

    http://files.cnblogs.com/action98/WPF_ChangeSkin_Sample.rar

    http://files.cnblogs.com/action98/CustomControl%E6%8E%A7%E4%BB%B6%E6%8D%A2%E8%82%A4.rar

      二.内容文件

        在如下情况中不宜使用程序集资源,而是使用应用程序部署文件。

    • 希望改变资源文件,而又不想重新编译应用程序。
    • 资源文件非常大。
    • 资源文件是可选的,并且可以不随程序集一起部署。
    • 资源是声音文件。

        为了能够成功使用内容文件,需要注意两点

    • 将资源的Build Action始终设置为Content
    • 将资源的Copy to Output Directory始终设置为CopyAlways

        使用的时候同程序集使用的是同一套URI方法

    Added by HeavenTao,2013/12/18

  • 相关阅读:
    CF1592F2 Alice and Recoloring 2
    CF1601E Phys Ed Online
    AGC050B Three Coins
    [学习笔记]珂朵莉树(Old Drive Tree)
    CF30E. Tricky and Clever Password
    [学习笔记]替罪羊树
    开源项目MiniOA队员招募通知
    MiniOA开发过程记录(33)自动登录模式
    MiniOA开发过程记录(29)安装Maven
    简易工作流设计思考(欢迎补充和批评)
  • 原文地址:https://www.cnblogs.com/action98/p/3480421.html
Copyright © 2011-2022 走看看