• wpf资源Resources探究性学习(一)


    测试环境

    vistual studio 2017

    .net framework 3.5

    window 10

    新建'WPF应用(.net framework)',项目名称为:WpfDemo,如下图:

    新建完项目后,默认带有一个名为MainWindow.xaml的代码

    一   简单使用字符串资源

    想要使用字符串,得在Window标签中引入对应的命名空间:

    xmlns:s="clr-namespace:System;assembly=mscorlib",如下图:

    格式为:xmlns:自己起的别名="clr-namespace:命名空间名称;assembly=程序集名称"

    当某一天,我不记得要引用那个命名控件时,我们可以这样:

    MainWindow.xaml.cs后台代码中,输入string,然后转到定义,就可以看到对应的dll名称和命名空间了

    可以看到程序集名称为mscorlib,命名空间为System,如下图:

    接着我们就可以在Button控件上通过key的方式使用资源了

    上图中的StaticResource代表使用静态资源显示,也可以使用动态资源DynamicResource进行显示:

    这就引出了静态资源和动态资源的区别,后面再谈

    二  继承FrameworkElement类的控件都有Resources这个属性,这就意味着该控件能在控件标签内定义资源。

    如:Window顶级控件,如下图:

    如StackPanel控件、TextBox控件和Button控件等,基本上所有的控件都有Resources这个属性,如下图:

    你注意观察一下,上图中不同控件下的资源键值key都为txt2,但都不报错,那以那个为准呢,我们大概都能猜到是从里到外进行寻找,如果在Button控件上使用key值,则会先找Button自己定义的,没找到再往上寻找StackPanel中声明的资源,如果还是没找到,则会再会往Window标签寻找。

    三   定义对象作为资源

    在步骤一中我们只是简单使用了一下字符串,但实际情况中类型可是多种多样的,测试步骤如下

    3.1   定义一个实体类,名为Student2,并编辑如下:

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Globalization;
    5. using System.Linq;
    6. using System.Text;
    7. using System.Windows.Controls;
    8. using System.Windows.Data;
    9. namespace WpfDemo
    10. {
    11. public class Student2
    12. {
    13. public string Name { set; get; }
    14. }
    15. }

    然后生成项目

    3.2  在前台xaml代码中引入该类对应的命名空间:

    格式为:xmlns:自己起的名称="clr-namespace:本项目使用的命名空间"

    由于是本项目,就不用使用本项目对应的dll名称了

    在这里用到了Binding,Source指定的是静态资源stu2,Path指定要显示对应的那个属性,这里是要显示Student2的Name属性,运行程序没有任何问题。

    但是,如果把静态资源修改为动态资源DynamicResource,在设计界面中使用没有任何问题,能正常显示,如下图:

    但运行程序就会报如下的错误,真的好奇怪:

    1. System.Windows.Markup.XamlParseException
    2. HResult=0x80131501
    3. Message=A 'DynamicResourceExtension' cannot be set on the 'Source' property of type 'Binding'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject.
    4. Source=<无法计算异常源>
    5. StackTrace:
    6. <无法计算异常堆栈跟踪>

    四   在后台代码中获取资源的值并修改资源值

    可以通过this.Resources["key"]或者this.控件名称.FindResource("key")

    通过非本控件的FindResource("key")也能找到对应的资源,如下图:

    五  静态资源和动态资源的区别

    出了点幺蛾子,还没整明白,要休息了,后续再看看

  • 相关阅读:
    飞桨科学计算套件PaddleScience
    技术对接48
    优化算法——全局灵敏度分析算法(PAWN )(Matlab代码实现)
    ch2_2系统调用的实现
    C语言从入门到实战——预处理详解
    GB/T 28627-2023 抹灰石膏检测
    集合系列(十八) -List集合移除元素的坑点总结
    C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
    简单宠物网页设计作业 静态HTML动物介绍网页作业 DW宠物网站模板下载 大学生简单野生动物网页作品代码
    腾讯云服务器价格计算器真心好用,推荐给大家!
  • 原文地址:https://blog.csdn.net/zxy13826134783/article/details/133100475