zoukankan      html  css  js  c++  java
  • 深入浅出WPF-10.Resource(资源)

    资源

    对象级资源:每个WPF的界面元素都有一个名为Resources的属性,这个属性继承自FrameworkElement类,其类型为ResourceDictionary,采用键值对的形式存储资源,当需要某个资源时,使用键值的形式索引到资源。资源保存时为object类型,所以在使用时先要对资源对象进行类型转换,XAML编译器能够根据标签的特性自动识别资源类型,但是在C#代码中,就需要通过代码我们自己实现转换。

    <Window x:Class="CommandDemo.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:sys="clr-namespace:System;assembly=mscorlib"
            Title="MainWindow" Height="Auto" Width="Auto" SizeToContent="WidthAndHeight">
        <Window.Resources>
            <ResourceDictionary>
                <sys:String x:Key="str" >你好啊,代码</sys:String>
            </ResourceDictionary>
        </Window.Resources>
        <Grid>
            <StackPanel Width="300" Name="stackPanel">
                <Button x:Name="button1" Margin="5" Content="Send Command"/>
                <TextBox x:Name="txtbox1" Margin="5" Height="100" Text="{StaticResource str}"/>
            </StackPanel>
        </Grid>
    </Window>
    
    private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                //查找指定资源,没有的话就会沿着元素树向上一级控件查找,如果连顶层的也没有,就会查找Application.Resources中进行查找,如果还是没有找到,就会抛异常
                string str = (string)this.FindResource("str");
                System.Console.WriteLine(str);
    
                //明确地知道资源放在了哪个资源字典中,就可以直接检索
                string str2 = (string)this.Resources["str"];
                System.Console.WriteLine(str2);
            }
    

    动态资源,是指在程序运行过程中任然会去访问资源

    静态资源,程序载入内存时,对资源一次性的使用,之后就不再去访问资源了,显然是在程序初始化时使用一次,之后就不再改变了。

    程序集资源(二进制资源):为了不把资源字典里的资源和应用程序内嵌的资源混淆,我们明确应用程序内嵌资源为程序集资源或者二进制资源,称资源字典里的资源为WPF资源或者对象资源。

    如果我们添加的资源时字符串而非文件,我们可以使用程序属性名称空间,Resources.resx文件,这个一般我们可以用作语言包。如果我们添加的资源时文件,我们则将文件直接拷贝到工程文件的文件夹中,然后设置文件的属性为:

    如果不希望按照资源的方式访问外部文件,我们设置如下:

    二进制资源的访问(Pack URL),格式如下:

    pack://applicaiton,,,[/程序集名称;][可选版本号;][文件夹名称/]文件名称
    

    或者直接简化成

    [文件夹名称/]文件名称
    
  • 相关阅读:
    对匿名函数的深入理解(彻底版)
    彻底理解js中this的指向,不必硬背。
    JavaScript中call,apply,bind方法的总结。
    再次讲解js中的回收机制是怎么一回事。
    关于在for循环中绑定事件打印变量i是最后一次。
    深入作用域之静态作用域与动态作用域
    理解js中的自由变量以及作用域的进阶
    使用WeihanLi.Npoi操作Excel
    基于 HtmlHelper 的自定义扩展Container
    JSON.Net 自定义Json序列化时间格式
  • 原文地址:https://www.cnblogs.com/vigorous/p/13403187.html
Copyright © 2011-2022 走看看