首页 > 其他分享 >WPF笔记4——静态资源(StaticResource)

WPF笔记4——静态资源(StaticResource)

时间:2024-11-26 11:55:58浏览次数:7  
标签:StaticResource 静态 笔记 Application Resource WPF 资源 字典

在WPF中,资源(Resource)是一种存储和共享对象的方式,可以在应用程序的不同部分之间重用。

在WPF中,有两种资源引用方式:静态资源(StaticResource)和动态资源(DynamicResource)

静态资源(StaticResource)

静态资源,用于在xaml加载时解析并应用资源。它通常用于引用在资源字典中定义的对象,如样式、颜色、控制模板等。

因为资源只查找一次,并且是在加载时确定的,所以性能较好。

1、在Window.Resources中的静态资源

点击查看代码
<Window x:Class="TestWPF.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:TestWPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Window.Resources>
        
        <!--
        定义两个 SolidColorBrush 资源;
        x:Key为xaml中定义的资源提供唯一的标识
        -->
        <SolidColorBrush x:Key="MyPinkBrush" Color="Pink"/>
        <SolidColorBrush x:Key="MyGreenBrush" Color="LightGreen"/>
        
    </Window.Resources>
    
    <StackPanel>

        <!--
        定义两个button,button背景色使用上面定义的SolidColorBrush资源 
        在xaml元素中使用{StaticResource ResourceKey}语法来引用资源;
        ResourceKey是资源在资源字典中的键
        -->
        <Button Content="Ok" 
                Margin="10"
                Background="{StaticResource MyPinkBrush}" />
        
        <Button Content="Cancel"
                Margin="10"
                Background="{StaticResource MyGreenBrush}"/> 

    </StackPanel>
</Window>

2、在Application.Resources中的静态资源

2.1在Application.xaml文件中定义Style,具体如下:

点击查看代码
<Application x:Class="TestWPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:TestWPF"
             StartupUri="MainWindow.xaml">
    <Application.Resources>

        <SolidColorBrush x:Key="MyColorBrush" Color="LightSalmon"/>
          
        <!--
        没有定义x:key的样式是隐式样式(implicit style);
        那么程序中的TargetType类型控件默认都使用此Style
        -->
        <Style TargetType="Button"> 
            <Setter Property="FontSize" Value="16"/>
            <Setter Property="Width" Value="200"/>
            <Setter Property="Height" Value="80"/>
            <Setter Property="Margin" Value="10"/>
            <Setter Property="Background" Value="LemonChiffon"/>
            <Setter Property="Foreground" Value="{StaticResource MyColorBrush}"/>
            <Setter Property="Tag" Value="default Style"/>
        </Style>


        
        <!--定义Button的基本颜色-->
        <Style x:Key="BaseStyle" 
               TargetType="Button">
            <Setter Property="Background" Value="LightGreen"/>
            <Setter Property="FontSize" Value="16"/>
            <Setter Property="Width" Value="200"/>
            <Setter Property="Height" Value="50"/>
            <Setter Property="Margin" Value="10"/>
            <Setter Property="Foreground" Value="White"/>
        </Style>


        <!--继承上面的BaseStyle,再定义一个Button的Style-->
        <Style x:Key="MyButtonStyle" 
               TargetType="Button"
               BasedOn="{StaticResource BaseStyle}"
               >
            <Setter Property="Background" Value="{StaticResource MyColorBrush}"/>
            <Setter Property="BorderThickness" Value="5"/>
            <Setter Property="BorderBrush" Value="Green"/>
            <Setter Property="Foreground" Value="Black"/>
        </Style>
        
        
    </Application.Resources>
</Application>

2.2、在MainWindow中使用上面定义的Style

点击查看代码
<Window x:Class="TestWPF.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:TestWPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" >

 
    <StackPanel>

      
        <Button Content="使用隐式样式"/>

        <Button Content="BaseStyle样式" Style="{StaticResource BaseStyle}"/>

        <Button Content="MyButtonStyle样式" Style="{StaticResource MyButtonStyle}"/>


        <!--通过x:Null设置Button不使用隐式样式-->
        <Button Content="不使用任何样式" Style="{x:Null}"/>

    </StackPanel>
</Window>
**运行效果:**

3、使用资源字典

3.1、添加资源字典文件

3.2、在资源字典文件中添加资源信息

点击查看代码
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
    <!-- 定义SolidColorBrush资源 --> 
    <SolidColorBrush x:Key="MyColorBrush" Color="LightSalmon"/>

    <!--
     没有定义x:key的样式是隐式样式(implicit style);
     那么程序中的TargetType类型控件默认都使用此Style
     -->
    <Style TargetType="Button">
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="Width" Value="200"/>
        <Setter Property="Height" Value="80"/>
        <Setter Property="Margin" Value="10"/>
        <Setter Property="Background" Value="LemonChiffon"/>
        <Setter Property="Foreground" Value="{StaticResource MyColorBrush}"/>
        <Setter Property="Tag" Value="default Style"/>
    </Style>



    <!--定义Button的基本颜色-->
    <Style x:Key="BaseStyle" 
            TargetType="Button">
        <Setter Property="Background" Value="LightGreen"/>
        <Setter Property="FontSize" Value="16"/>
        <Setter Property="Width" Value="200"/>
        <Setter Property="Height" Value="50"/>
        <Setter Property="Margin" Value="10"/>
        <Setter Property="Foreground" Value="White"/>
    </Style>


    <!--继承上面的BaseStyle,再定义一个Button的Style-->
    <Style x:Key="MyButtonStyle" 
            TargetType="Button"
            BasedOn="{StaticResource BaseStyle}"
            >
        <Setter Property="Background" Value="{StaticResource MyColorBrush}"/>
        <Setter Property="BorderThickness" Value="5"/>
        <Setter Property="BorderBrush" Value="Green"/>
        <Setter Property="Foreground" Value="Black"/>
    </Style>
 
</ResourceDictionary>

3.3、在Application.Resource中合并资源字典

  • 打开Application.xaml文件
  • 在Application.Resource中使用<ResourceDictionary.MergedDictionaries>元素来合并上面创建的资源字典。这样在应用程序级别就可以共享这些资源了;
    例如:



    3.4、在Window.Resource中合并资源字典
    打开需要使用资源的窗口对应的xaml文件;
    在Window.Resource中使用与上面相同的方式来合并资源字典
    例如:
点击查看代码
<Window x:Class="TestWPF.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:TestWPF"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" >

    <Window.Resources>
        
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="./MyStyleResource/Dictionary_ButtonStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
        
    </Window.Resources>
    
 
    <StackPanel>

        <!--使用资源字典中的样式-->      
        
        <Button Content="使用隐式样式"/>

        <Button Content="BaseStyle样式" Style="{StaticResource BaseStyle}"/>

        <Button Content="MyButtonStyle样式" Style="{StaticResource MyButtonStyle}"/>


        <!--通过x:Null设置Button不使用隐式样式-->
        <Button Content="不使用任何样式" Style="{x:Null}"/>

    </StackPanel>
</Window>

标签:StaticResource,静态,笔记,Application,Resource,WPF,资源,字典
From: https://www.cnblogs.com/zeoHere/p/18569856

相关文章

  • 界面控件DevExpress WPF v24.2新功能预览 - 支持DateOnly & TimeOnly
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • [编程笔记] 系统日期格式引起的bug
    系统获取的日期格式不对,导致程序出现异常,出现过多次了,这里记录一下。起因是测试说某个跟日期相关的活动,在他环境里失效,而我们开发本地测试了多遍都是正常的,这就很奇怪了,有种想给他重装系统的念头,哈哈。经过一系列的分析和排查,发现是他本地系统设置的日......
  • 工作学习笔记(十五)Mybatis-Plus项目中使用eq
    在今天的工作中遇到了一个问题,在这记录一下第一次使用eq()。方法作用它的主要作用是在构建SQL查询语句的条件部分时,添加一个等于的判断条件。例如,当你想从数据库表中查询出某一字段值等于特定值的记录时,就可以使用eq()方法来实现这个条件构建。方法语法及参数说明语法:......
  • 程序员修炼之道,从小工到专家 阅读笔记
    时间管理的重要性:时间是程序员最宝贵的资源,要学会如何高效利用。提出了时间管理的基本原则,例如优先任务、避免拖延等。设定优先级:使用“重要-紧急”矩阵来评估和排序任务。先完成重要且紧急的工作,然后是重要但不紧急的任务。专注(DeepWork):强调在编程时应减少干扰,保持专......
  • python复习笔记——2024.11.25
    2024.11.25一、类的定义二、类与实例的关系#定义一个猫类,age,name,color是属性,或者称为成员变量classCat: age=Nonename=Nonecolor=Nonecat1=Cat()#通过对象名.属性名,可以给各个属性赋值cat1.name="小白"cat2,age=2cat3.color="白色"print(f......
  • Java学习笔记——2024.11.25
    2024.11.25一、Java_DOS原理1.DOS基本原理创建文件夹=>mdd:\\xxx消除文件夹=>rdd:\\xxx2.相对路径和绝对路径=>相对路径:从当前目录开始定位,形成的一个路径=>绝对路径:从顶级目录d,开始定位,形成的路径举例子:相对路径:..\..\abc2\test200\hello.txt......
  • 读《Effective Java》笔记 - 条目8
    条目8:避免使用终结方法和清理方法什么是终结方法(finalizer)和清理方法(cleaner)?终结方法(finalizer):是Object类的一个方法:protectedvoidfinalize(),可以由子类重写。(Java9开始已经弃用,但是Java类库仍在使用)它在垃圾收集器(GarbageCollector)将对象回收之前调用,用来释放资......
  • 学习笔记(四十六):$$语法:内置组件双向同步
    概述:$$运算符为系统内置组件提供TS变量的引用,使得TS变量和系统内置组件的内部状态保持同步使用规则:1、当前$$支持基础类型变量,以及@State、@Link和@Prop装饰的变量2、$$绑定的变量变化时,会触发UI的同步刷新3、支持的组件 使用示例:@Entity@ComponentexportstructLog......
  • 【力扣热题100】[Java版] 刷题笔记-448. 找到所有数组中消失的数字
    题目:448.找到所有数组中消失的数字给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1,n] 内。请你找出所有在 [1,n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。解题思路依据题目,有两种解题方式:第一种是暴力破解,直接创建一个1到n......
  • 《Django 5 By Example》阅读笔记:p237-p338
    《Django5ByExample》学习第11天,p237-p338总结,总计102页。一、技术总结1.followsystem(关注功能)表之间的关系有三种:OneToOneField,many-to-one(使用Foreignkey()),ManyToManyField。有时候为了更好的描述对象之间的关系,需要多创建一张中间表:Creatinganintermediatemodel......