WPF 如何利用Blend给Button添加波纹效果

news/2024/11/15 16:52:09/文章来源:https://www.cnblogs.com/lvpp13/p/18384449

先看一下效果吧:

如果不会写动画或者懒得写动画,就直接交给Blend来做吧;

其实Blend操作起来很简单,有点类似于在操作PS,我们只需要设置关键帧,鼠标点来点去就可以了,Blend会自动帮我们生成我们想要的动画效果.

第一步:要创建一个空的WPF项目

第二步:右键我们的项目,在最下方有一个,在Blend中设计

 如果没有这个,应该是你在安装vs的时候把它勾掉了,默认是勾选的,没有的话也可以重新安装回来

点一下上方导航条的 工具栏

安装一下就可以了

第三步:打开的Blend项目操作页面和WPF的页面几乎是一模一样的

我们在里面添加一个button按钮,设置长100,高30

然后在设计器中右键我们的Button,找到编辑模板,编辑副本, 点击确定, 然后vs会给我们生成一大段代码

 他的ControlTemplate里面的代码是这样的

<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true"><ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>

我们改成下面这样一段代码

<Grid><Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="#FFDACFCF" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true" CornerRadius="10"/>
          <Border x:Name="border1" Background="#7FFFFFFF" CornerRadius="10"><Border.Clip><RectangleGeometry><RectangleGeometry.Rect><Rect Width="0" Height="30" X="50" Y="0"/></RectangleGeometry.Rect></RectangleGeometry></Border.Clip></Border><ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Grid>

我们把原本的ContentPresenter从Border内部拿出来,然后在他们中间夹一层Border,再设置一下这个Border的背景色为White,接着在属性面板里面把他的透明度调整成百分之50

(也可以自己根据喜好调整颜色和透明度,只要能看到Button的文本就行了)

再给这个border添加一个Clip(Clip是什么可以把鼠标放在Clip上,按F1,查看文档说明)

设置里面的Rect的坐标和宽高(坐标点是基于空间的左上角,左上角就是(0,0),右下角就是(宽,高))

因为我们设置的从中间像两边扩散的效果,所以我们把这个矩形放到中间位置,也就是(50,0)的位置

第四步:现在来利用Blend来写一段动画

Blend得左边有一个文档大纲

打开它就能看见 对象和时间轴

 点一下那个绿色得 + 号,Blend会创建一个空得动画

 接着整个界面就会被红色的线圈住

 这个时候我们就可以添加动画了

 我们在0秒和1秒的位置,分别点一下那个记录关键帧的按钮

 然后我们再点一下1秒关键帧的位置

 最后在代码里面选中我们的Border的Rect

修改这里的值,就表示,在1秒以后,这个border的clip会变成什么值

初始值是50,0,0,30

我们改成0,0,100,30,按回车,Blend就自动把动画给生成了

 第五步:把这个动画运用到Button的Triggers下面的IsMouseOver为true的下面

<Trigger Property="IsMouseOver" Value="true"><Trigger.EnterActions><BeginStoryboard x:Name="bs1" Storyboard="{StaticResource Storyboard1}"/></Trigger.EnterActions><Trigger.ExitActions><StopStoryboard BeginStoryboardName="bs1"/></Trigger.ExitActions>
</Trigger>

这样在IsMouseOver这个属性变成True的时候,就会执行这个动画了;

或者我们也可以用EventTrigger来实现这个效果

<EventTrigger RoutedEvent="{x:Static UIElement.MouseEnterEvent}"><BeginStoryboard Storyboard="{StaticResource Storyboard1}" x:Name="bs1"/>
</EventTrigger>
<EventTrigger RoutedEvent="{x:Static UIElement.MouseLeaveEvent}"><StopStoryboard BeginStoryboardName="bs1"/>
</EventTrigger>

区别就在于一个是在属性变更的时候触发动画,一个是在路由事件中执行动画,二者任选其一即可

项目github地址:bearhanQ/WPFFramework: Share some experience (github.com)

QQ技术交流群:332035933;

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绘制ply模型顶点的法线(通过两点)

import trimesh import matplotlib.pyplot as plt# 读取点云文件 mesh = trimesh.load_mesh(test.ply)# 计算法线 mesh.vertex_normals# 创建一个新的图形窗口 fig = plt.figure() ax = fig.add_subplot(111, projection=3d)# 绘制顶点 ax.scatter(mesh.vertices[:, 0], mesh.v…

HandyControl 初识 第一次正确引入

在 App.xaml配置HandyControl,一个是皮肤资源,一个是主题资源 完整代码: ` <Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Th…

信息熵计算程序[Python+CSV格式数据集]

0 前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。 程序中包含了计算过程的数据和详细信息以及最终计算结果。 编程语言为Python,搭配CSV数据格式使用。1 数据集 1.1 游玩数据集 根据天…

【整理】 【Windows系列】Windows安全日志分析实战:关键事件+详解

参考🔗: https://mp.weixin.qq.com/s?__biz=MzI5MjY4MTMyMQ==&mid=2247485189&idx=1&sn=f97aca178ab188d35e3182bf89ddf4dc&chksm=ec7ce403db0b6d151ee60369468e79229d8d3a264edb2967d7bd2ecdcd69e93af2abfb68dd1c&cur_album_id=3541179802739621890&a…

【ROS教程】ROS文件系统和基础架构

@目录1.工作空间目录1.1 package.xml2.启动节点的方式2.1 一次启动一个2.2 一次启动多个3.ROS常用命令3.1 增3.2 查3.3 执行3.3.1 加载环境变量3.3.2 运行节点3.4 查看计算图4.创建功能包4.1 选择工作目录4.2 创建功能包目录4.3 建立功能包1.工作空间目录WorkSpace --- 自定义的…

沉浸式体验吸尘器产品的3D可视化盛宴

在这个科技日新月异的时代,每一个细微之处都蕴含着创新的火花,而家居清洁作为我们日常生活中不可或缺的一环,也正在经历一场前所未有的变革。大家可以想象一下,无需亲临实体店,只需轻点鼠标或滑动屏幕,一款款精心设计的吸尘器便以3D形态跃然眼前,仿佛触手可及。这不仅仅…

Valid注解

文章链接地址:https://blog.csdn.net/m0_58680865/article/details/127817779文章目录前言 一、@Valid注解1、源码解析 2、所属的包 3、参数校验使用注解(1)空校验 (2)Boolean校验 (3)长度校验 (4)日期校验 (5)数值校验 (6)其他校验4、具体使用使用 @Valid 进行参…

【ACMMM2024】Multi-Scale and Detail-Enhanced Segment Anything Model for Salient Object Detection

论文:https://arxiv.org/pdf/2408.04326 代码:https://github.com/BellyBeauty/MDSAM论文的研究动机就是使用SAM来解决显著性检测(SOD)问题,主要有两个改进:提出了Lightweight Multi-Scale Adapter, LMSA来微调SAM 提出了Multi-Level Fusion Module, MLFM 和 Detail Enha…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型,快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程,将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有…

题解:P11000 [蓝桥杯 2024 省 Python B] 数字串个数

P1100,纪念这个特别的数字,来水一篇。用 \(1 \sim 9\) 没有任何特殊情况的方法数:\(9^{10000}\)。 排除没有 \(3\) 和 \(7\) 的方法。 \(9^{10000} - 8^{10000} - 8^{10000}\) 加上 \(3\) 和 \(7\) 混一起的方法数。 \(9^{10000} - {(9 - 1)}^{10000} - {(9 - 1)}^{10000} +…

【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话

引言在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器,没…

免费、开源、详细完整的unity游戏、游戏源码、教程:人工智能分析和处理对话的美好三维世界(定期更新)

免费、开源、详细完整的unity游戏、游戏源码、教程:人工智能分析和处理对话的美好三维世界。这份unity游戏、游戏源码、教程:完全免费,完全开源,完整详细,通俗易懂,适合初学者入门,定期更新。 我不想和任何人说话,任何人不要跟我说话,不要打扰我,我要安安静静的写。我…