WPF对象样式

news2024/11/19 13:42:41

基本样式设置

Style 设置指定对象的属性

属性:

TargetType 引用在哪个类型上面,例如Button、Textblock。。

如果在控件对象里面设置Style,则TargetType必须指定当前控件名

只在作用域里面有效果,其他的相同控件没有影响,作用域类似于C#中的大括号

Setters 集合 设置属性的集合 可以省略

原理就是反射,根剧控件的属性进行设置值,反射到控件属性

设置的属性 优先使用控件上的指定属性,控件属性>Style属性

Property 属性

Value 属性的值

Triggers 集合 触发器 监听 不可以省略

Property 监听的属性

Value 当监听的属性 == 这个Value的时候 执行以下方法 在下方写满足之后的方法 Trigger.Setters(此时的Setters也可以省略)

<Button>
    <Button.Style>
        <Style TargetType="Button">
            <!--<Style.Setters> 可以省略-->
            <Style.Setters>
                <Setter Property="Content" Value="Btn"/>
                <Setter Property="FontSize" Value="50"/>
                <Setter Property="Height" Value="100"/>
                <Setter Property="Width" Value="200"/>
                <Setter Property="Background" Value="Orange"/>
            </Style.Setters>
        </Style>
    </Button.Style>
</Button>

<Style.Triggers>
    <Trigger Property="Background" Value="Orange">
        <!--满足条件执行-->
        <!--<Trigger.Setters> 可以省略-->
        <Trigger.Setters>
            <Setter Property="Content" Value="被Trigger改变了"/>
        </Trigger.Setters>
    </Trigger>
</Style.Triggers>

由此可以看到我们按钮的Content被触发器给修改了

样式触发器设置

样式触发器:根据用户行为,改变控件外观

MultiTrigger 多重条件

需求:当需要多个条件一起才能触发的时候,使用

<MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="Background" Value="Orange"/>
        <Condition Property="Content" Value="Btn"/>
    </MultiTrigger.Conditions>
    <!--两个都满足才会触发-->
    <!--<MultiTrigger.Setters> 可以省略-->
    <MultiTrigger.Setters>
        <Setter Property="Foreground" Value="Green"/>
    </MultiTrigger.Setters>
</MultiTrigger>

还是上面的图为案例代码:

EventTrigger 事件触发

需求:当需要点击获取鼠标等事件触发的时候,使用此方法

此方法仅可以使用动画去变化,不可以直接Setter

<!--必须设置路由事件 RoutedEvent-->
<EventTrigger RoutedEvent="MouseMove">
    <BeginStoryboard>
        <Storyboard>
            <DoubleAnimation Duration="0:0:0.5" To="200"
                             Storyboard.TargetProperty="Width" />
            <DoubleAnimation Duration="0:0:0.5" To="400"
                             Storyboard.TargetProperty="Height" />
        </Storyboard>
    </BeginStoryboard>
</EventTrigger>

当我鼠标进入的时候,变成这个样子:触发生效

补充

需求:我需要鼠标进入的时候变大,鼠标出去的时候正常大小

利用触发器触发和离开的方法

<Trigger Property="IsMouseOver" Value="True">
    <!--EnterActions 开始触发-->
    <Trigger.EnterActions>
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Duration="0:0:0.5" To="400"
                                 Storyboard.TargetProperty="Width"/>
                <DoubleAnimation Duration="0:0:0.5" To="400"
                                 Storyboard.TargetProperty="Height"/>
            </Storyboard>
        </BeginStoryboard>
    </Trigger.EnterActions>
    <!--ExitActions 退出触发-->
    <Trigger.ExitActions>
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation Duration="0:0:0.5" To="200"
                                 Storyboard.TargetProperty="Width"/>
                <DoubleAnimation Duration="0:0:0.5" To="100"
                                 Storyboard.TargetProperty="Height"/>
            </Storyboard>
        </BeginStoryboard>
    </Trigger.ExitActions>
</Trigger>

鼠标进入:

鼠标离开:

注意:触发器的渲染是从上至下,同样的触发下面的动作会覆盖上面的动作。

访问级别

越接近对象,级别越高

样式继承

BasedOn: 继承父样式

样式继承必须单独写在资源里面

SunBtn样式中只写了前景色,因为继承了PreBtn的样式,所以长宽背景色都继承了。

<Window.Resources>
  <Style TargetType="Button" x:Key="preStyle">
      <Setter Property="Height" Value="80"/>
      <Setter Property="Width" Value="200"/>
      <Setter Property="Background" Value="Orange"/>
  </Style>
  <Style TargetType="Button" x:Key="sunStyle" BasedOn="{StaticResource preStyle}">
      <Setter Property="Foreground" Value="Red"/>
  </Style>
</Window.Resources>
<StackPanel>
    <Button Content="PreBtn" Style="{StaticResource preStyle}" />
    <Button Content="SunBtrn" Style="{StaticResource sunStyle}"/>
</StackPanel>

注意:可以多层次继承和C#中的类一样,但是不可以继承多个。

优先级,自己的大于继承的,自己没有找继承。总结:越接近对象,级别越高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1890516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode的使用方法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🔮LeetCode的使用方法 🔮LeetCode 是一个在线编程平台,广泛…

RPM包管理-rpm命令管理

1.RPM包命令原则 所有的rpm包都在光盘中 例&#xff1a;httpd-2.2.15-15.e16.centos.1.i686.rpm httpd 软件包名 2.2.15 软件版本 15 软件发布的次数 e16.centos 适合的Linux平台 i686 适合的硬件平台…

粒子扩展卡尔曼滤波|MATLAB代码

粒子滤波PF与扩展卡尔曼滤波EKF结合 下载链接:https://download.csdn.net/download/callmeup/89512392 粒子滤波 粒子滤波是一种用于估计状态变量的非线性滤波方法。它通过引入一组粒子来近似表示概率分布,从而利用蒙特卡洛方法进行状态估计。粒子滤波的主要思想是根据系统…

新手教学系列——慎用Flask-SQLAlchemy慢日志记录

在使用 Flask-SQLAlchemy 开发应用时,了解和避免潜在的问题是非常重要的。特别是在常驻进程和循环执行任务的场景下,慢查询记录功能(SQLALCHEMYRECORDQUERIES)可能会引发严重的内存泄漏问题。本文将详细介绍这个问题,并提供解决方案,帮助你在开发过程中避免掉入这些陷阱。…

哈希表 | 哈希查找 | 哈希函数 | 数据结构 | 大话数据结构 | Java

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;毛毛张今天分享的内容&#x1f586;是数据结构中的哈希表&#xff0c;毛毛张主要是依据《大话数据结构&#x1f4d6;》的内容来进行整理&#xff0c;不…

3D Gaussian Splatting代码中的train和render两个文件代码解读

现在来聊一聊训练和渲染是如何进行的 training train.py line 31 def training(dataset, opt, pipe, testing_iterations, saving_iterations, checkpoint_iterations, checkpoint, debug_from):# 初始化第一次迭代的索引为0first_iter 0# 准备输出和日志记录器tb_writer p…

0703_ARM7

练习&#xff1a; 封装exti&#xff0c;cic初始化函数 //EXTI初始化 void hal_key_exti_init(int id,int exticr,int mode){//获取偏移地址int address_offset (id%4)*8;//获取寄存器编号int re_ser (id/4)1;//printf("address_offset%d,re_ser%d\n",address_o…

苹果手机怎么刷机?适合小白的刷机办法!

自己的苹果手机用时间长了&#xff0c;有些人想要为自己的手机重新刷新一下&#xff0c;但又不知道怎么刷机。不要慌现在就来给大家详细介绍一下苹果手机怎么刷机&#xff0c;希望可以帮助到大家。 iPhone常见的刷机方式&#xff0c;分为iTunes官方和第三方软件两种刷机方式。 …

基于Web技术的教育辅助系统设计与实现(SpringBoot MySQL)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

强行仅用time.localtime制作“日历牌”——全程记录“顶牛”“调戏”我的AI学习搭子

强行只用time.localtime制作“日历牌”&#xff0c;码好代码试炼通过&#xff0c;想榨取ai智能优化算法&#xff0c;结果失败。本文详细记录“顶牛”全过程。 (笔记模板由python脚本于2024年07月01日 19:16:26创建&#xff0c;本篇笔记适合喜欢python&#xff0c;喜欢搞“事儿”…

p2p、分布式,区块链笔记: 通过libp2p的Kademlia网络协议实现kv-store

Kademlia 网络协议 Kademlia 是一种分布式哈希表协议和算法&#xff0c;用于构建去中心化的对等网络&#xff0c;核心思想是通过分布式的网络结构来实现高效的数据查找和存储。在这个学习项目里&#xff0c;Kademlia 作为 libp2p 中的 NetworkBehaviour的组成。 以下这些函数或…

controller不同的后端路径对应vue前端传递数据发送请求的方式,vue请求参数 param 与data 如何对应后端参数

目录 案例一&#xff1a; 为什么使用post发送请求&#xff0c;参数依旧会被拼接带url上呢&#xff1f;这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后&#xff0c;data会以请求体传递 补充&#xff1a;后端controller 参数上如果没写任何注解&#xff0c…

Redis中hash类型的操作命令(命令的语法、返回值、时间复杂度、注意事项、操作演示)

文章目录 字符串和哈希类型相比hset 命令hget 命令hexistshdelhkeyshvalshgetallhmgethlenhsetnxhincrbyhincrbyfloat 字符串和哈希类型相比 假设有以下一种场景&#xff1a;现在要在 Redis 中存储一个用户的基本信息(id1、namezhangsan、age17)&#xff0c;下图表示使用字符串…

Vue3轻松创建交互式仪表盘

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Plotly.js 的 Vue 仪表盘组件 应用场景介绍 仪表盘是一种交互式可视化工具&#xff0c;用于监控和分析关键指标。它广泛应用于各种行业&#xff0c;例如金融、医疗保健和制造业。 代码基本功能介绍 本…

Linux源码阅读笔记12-RCU案例分析

在之前的文章中我们已经了解了RCU机制的原理和Linux的内核源码&#xff0c;这里我们要根据RCU机制写一个demo来展示他应该如何使用。 RCU机制的原理 RCU&#xff08;全称为Read-Copy-Update&#xff09;,它记录所有指向共享数据的指针的使用者&#xff0c;当要修改构想数据时&…

搭建论坛和mysql数据库安装和php安装

目录 概念 步骤 安装mysql8.0.30 安装php 安装Discuz 概念 搭建论坛的架构&#xff1a; lnmpDISCUZ l 表示linux操作系统 n 表示nginx前端页面的web服务 m 表示 mysql 数据库 用来保存用户和密码以及论坛的相关内容 p 表示php 动态请求转发的中间件 步骤 &#xff…

基于Cardinal的AWD攻防平台搭建与使用以及基于docker的题目环境部署

关于 CTF 靶场的搭建与完善勇师傅前面已经总结过了&#xff0c;参考&#xff1a; CTF靶场搭建及Web赛题制作与终端docker环境部署_ctfoj搭建-CSDN博客 基于H1ve一分钟搭好CTF靶场-CSDN博客 Nginx首页修改及使用Nginx实现端口转发_nginx 修改欢迎首页-CSDN博客 关于H1ve导…

《IT 领域准新生暑期预习指南:开启未来科技之旅》

IT专业入门&#xff0c;高考假期预习指南 高考的落幕&#xff0c;只是人生长途中的一个逗号&#xff0c;对于心怀 IT 梦想的少年们&#xff0c;新的征程已然在脚下铺展。这个七月&#xff0c;当分数尘埃落定&#xff0c;你们即将迈向新的知识殿堂&#xff0c;而这个假期&#…

235、二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自…