首页 > 其他分享 >Wpf基础入门——资源(Resources)

Wpf基础入门——资源(Resources)

时间:2023-05-29 21:11:35浏览次数:44  
标签:StaticResource 入门 DynamicResource Resources 使用 Wpf MainWindow 资源

本篇文章学习于: 刘铁猛老师《深入浅出WPF》

WPF 对象级资源

每个WPF的界面元素都具有一个名为Resources 的属性,这个属性继承自FrameworKElement类,其类型为ResourceDictionary。ResourceDictionary 能够以“键一值”对的形式存储资源,当需要使用某个资源时,使用“键一值”对可以索引到资源对象。在保存资源时,ResourceDictionary视资源对象为object类型,所以在使用资源时先要对资源对象进行类型转换,XAML编译器能够根据标签的Attribute自动识别资源类型,如果类型不对就会抛出异常,但在C#代码里检索到资源对象后,类型转换的事情就只能由我们自己来做了。

<Window x:Class="Demo6.Wpf资源.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  xmlns:local="clr-namespace:Demo6.Wpf资源"
  xmlns:sys="clr-namespace:System;assembly=mscorlib"
  mc:Ignorable="d"
  Title="MainWindow" Height="450" Width="800">
  <Window.Resources>
    <sys:String x:Key="str">资源学习</sys:String>
    <sys:Double x:Key="Pi">3.1415926</sys:Double>
  </Window.Resources>
  <Grid>
    <TextBlock Text="{StaticResource str}"/>
  </Grid>
</Window>

image.png

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

StaticResource和DynamicResource

当资源被存储进资源词典后,我们可以通过两种方式来使用这些资源—静态方式和动态方式。
静态资源使用(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再去访问这个资源了。
动态资源使用(DynamicResource)使用指的是在程序运行过程中仍然会去访问资源。
显然,如果你确定某些资源只在程序初始化的时候使用一次、之后不会再改变,就应该使用StaticResource,而程序运行过程中还有可能改变的资源应该以DynamicResource形式使用。

示例:

<Window x:Class="Demo6.Wpf资源.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Demo6.Wpf资源"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.Resources>
        <sys:String x:Key="str">资源学习</sys:String>
        <sys:Double x:Key="Pi">3.1415926</sys:Double>
        <TextBlock x:Key="tb1" Text="1111"/>
        <TextBlock x:Key="tb2" Text="1111"/>
    </Window.Resources>
    <StackPanel>
        <TextBlock Text="{StaticResource str}"/>
        <Button Content="{StaticResource tb1}"/>
        <Button Content="{DynamicResource tb2}"/>
        <Button Content="更新" Name="btnUpdate" Click="btnUpdate_Click"/>
    </StackPanel>
</Window>

image.png
image.png

namespace Demo6.Wpf资源 {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }

        private void btnUpdate_Click(object sender, RoutedEventArgs e) {
            this.Resources["tb1"] = "2222";
            this.Resources["tb2"] = "2222";
        }
    }
}

标签:StaticResource,入门,DynamicResource,Resources,使用,Wpf,MainWindow,资源
From: https://www.cnblogs.com/swbna/p/17441668.html

相关文章

  • WPF概述
    文章来源:WindowsPresentationFoundation-WPF.NETFrameworkWPF概述WindowsPresentationFoundation(WPF)可以创建适用于Windows且具有非凡视觉效果的桌面客户端应用程序。WPF的核心是一个与分辨率无关且基于矢量的呈现引擎,旨在充分利用现代图形硬件。WPF通过一......
  • Wpf基础入门——控件介绍
    本篇文章学习于:刘铁猛老师《深入浅出WPF》控件到底是什么?WPF中是数据驱动UI,数据是核心、是主动的;UI从属于数据并表达数据、是被动的。Control是数据和行为的载体,而无需具有固定的形象。控件的派生关系如下:WPF的内容模型各类内容模型详解我们把符合某类内容模型的UI元......
  • python爬虫入门
    使用sublimetext3可以先保存文件,保存文件时,名字后缀需要添加.py否则无法识别为Python文件为方便命令行调用,文件名不用空格 可直接在文件夹内输入cmd快捷进入,shift+右键也可以Tab补齐内容,↑历史记录前端入门html <>开始</>结束head内一般是导入的元素,css,js脚本等css......
  • CMake入门
    CMakecmake的定义是--高级编译配置工具当多人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候就需要用到------CMake所有操作都是通过编译CMakeLists.txt来完成的官方网站是www.cmake.org学习CMake的目的,为将来处理大型的C/C++......
  • Kubernetes 入门实战
    Kubernetes入门实战DockerDocker的安装安装docker.io为了方便,你还可以使用-y参数来避免确认,实现自动化操作:sudoaptinstall-ydocker.io#安装DockerEngineDockerEngine不像DockerDesktop那样可以安装后就直接使用,必须要做一些手工调整才能用起来,所以你还要......
  • Apache Flume教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介Flume是Apache下面的一个分布式组件,它提供高效,可靠的收集,整合,传输日志数据的服务。Flume可以理解成一个管道,它连接数据的生产者和消费者,它从数据的生产者(Source)获取数据,保存在自己的缓存(Channel)中,然后通过Sink发送到消费者。它不对数据做保存和复杂的处理(可以做简单......
  • Java学习 - 入门
    Java三大版本JavaSE:标准版JavaME:嵌入式开发JavaEE:E企业级开发JDK、JRE、JVMJDK:Java开发者工具JRE:Java运行时环境JVM:Java虚拟机Java开发环境卸载JDKJava安装目录:环境变量-JAVA_HOME删除java安装目录删除JAVA_HOME删除path下关于java目录运行cmdjava-version......
  • Javase入门|史上最好用的截图工具Snipaste
    在学习Java的时候,有时候老师操作的比较快,通过截图的方式将老师的操作保存下来,以便后期的操作。另外截图之后的图片也可以用于笔记的记录,在笔记当中最好采用图文并茂的方式,这样更加利于知识的回顾。这篇文章详细介绍下snipaste截图工具的下载安装及使用,配合视频效果更佳动力节点老杜......
  • pytest从入门到精通笔记
    一、pytest简介pytest是一个非常成熟的全功能的Python测试框架,比unittest更灵活,容易上手。主要有以下几个特点:1.简单灵活,容易上手2.支持参数化3.能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)4.pytest具......
  • WPF 跨用户控件传递数据
    WPF跨用户控件传递数据前言在写Wpf程序中,经常为了解耦,会写不同的用户控件组装到一个界面上,这样便于管理。但是呢,如果直接通过这个大的界面的某控件调用另一个其他用户控件中的控件,是不行滴!所以,这就是写本篇文章的理由。项目实现项目结构2个用户控件【1个存放Button、1个存......