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

5 篇文章 0 订阅

测试环境:

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,并编辑如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Data;

namespace WpfDemo
{
    public class Student2
    {
        public string Name { set; get; }
    }
}

然后生成项目

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

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

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

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

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

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

System.Windows.Markup.XamlParseException
  HResult=0x80131501
  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.
  Source=<无法计算异常源>
  StackTrace:
<无法计算异常堆栈跟踪>

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxy2847225301

测试使用

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值