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

  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/action98/p/3480421.html
Copyright © 2011-2022 走看看