阅读 73

WPF中的资源

一、资源概述

资源分为程序资源(二进制资源或程序集资源,是应用程序的内嵌资源)和对象资源(又称WPF资源,是资源词典内的资源,如模板,程序样式和主题)

在资源检索时,先查找控件自己的Resource属性,如果没有这个资源程序会沿着逻辑树向上一级控件查找,如果连顶层容器都没有这个资源,程序就会去查找Application.Resource(程序的顶级资源),如果还没有找到就会抛出异常。

假如我有x:key="TextBoxDic"的资源,也可以在程序中直接使用。

      private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.textBox1.Style = (Style)this.FindResource("TextBoxDic");
        }

具体的使用过程可以参考一篇博客

二、动态资源和静态资源

静态资源(StaticResource):指的是在程序载入内存时对资源的一次性使用,之后就不在访问这个资源。

动态资源(DynamicResource):指的是在程序运行过程中仍然会去访问资源。

 


    "res1" Text="海上生明月"/>
    "res2" Text="海上生明月"/>


    

 

Button2会变。

 三、向程序中添加二进制资源

在应用程序Properties名称空间中的Resource.resx资源文件中。需要把Resources.resx的访问级别由Internal改为Public

在XAML代码中使用Resource.resx中的资源,先把程序的Properties名称空间映射为XAML名称空间,然后使用x:Static标签扩展来访资源。

需要添加的字符串资源如下,假如我在Resource.resx加的是UserName:

<Window

    xmlns:prop="clrnamespace:***.Properties">

"x:Static prop:Resources.UserName/>

使用Resource.resx的最大好处是便于程序的国际化和本地化。

四、使用Pack URI路径访问二进制资源

固定格式

pack://application,,,[/程序集名称;][可选版本号;][文件夹名称/]文件名称
“//application,,,”可以省略,“/程序集名称,可选版本号”可以使用缺省值

        
            
                "pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
                "pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
                "pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />

            
        
    

与之等价的C#代码

Uri imageUri=new Uri(@"Resource/Images/flag.jpg",UriKind.Relative);//相对路径使用
this.image.Source=new BitmapImage(imageUri);

Uri imageUri=new Uri(@"pack://application:,,,/Resource/Images/flag.jpg",UriKind.Absolute);//绝对路径使用
this.image.Source=new BitmapImage(imageUri);

 

原文:https://www.cnblogs.com/yxzstruggle/p/15170961.html

文章分类
代码人生
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐