首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年08月28日 12:57

先看一下效果吧:

如果不会写动画或者懒得写动画,就直接交给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;

 

From:https://www.cnblogs.com/lvpp13/p/18384449
本文地址: http://www.shuzixingkong.net/article/1521
0评论
提交 加载更多评论
其他文章 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!
嵌入式STM32单片机开发环境配置教学Win/Mac &#183; 本教程支持Windows和Mac &#183; Windows可选的开发软件为Keil、Clion、STM32CubeMX,可自由选择开发方式 &#183; Mac的开发环境为(Clion+OpenOCD+STM32CubeMX),
最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!! 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!! 最全!嵌入式STM32单片机开发环境配置教学Win/Mac!!!
【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话
引言 在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器
【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话 【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话 【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话
B 端产品未来几年的发展趋势
未来几年,B 端产品领域将面临着诸多挑战和机遇。人工智能与机器学习的深度融合、云计算与容器化技术的持续发展、用户体验与设计的重要性日益凸显、数据安全与隐私保护的挑战与机遇、行业垂直化与专业化发展以及敏捷开发与持续交付的普及等趋势,将对 B 端产品经理提出更高的要求
B 端产品未来几年的发展趋势 B 端产品未来几年的发展趋势 B 端产品未来几年的发展趋势
Python中的分布式框架Ray的安装与使用
本文介绍了基于Python的分布式框架Ray的基本安装与使用。Ray框架下不仅可以通过conda和Python十分方便的构建一个集群,还可以自动的对分布式任务进行并发处理,且支持GPU分布式任务的提交,极大的简化了手动分布式开发的工作量。
Python中的分布式框架Ray的安装与使用 Python中的分布式框架Ray的安装与使用 Python中的分布式框架Ray的安装与使用
关于告警,要想做好,从这些方面着手
各类监控系统都会产生告警事件,于是,就产生了 FlashDuty、PagerDuty、Opsgenie 这类产品,做告警事件的收敛降噪、排班认领升级等。如果你想增强自己公司的告警事件处理能力,参考(chao xi)这些产品的功能就可以了 &#128526;。 告警集成:目标是在一个Oncall平台上
关于告警,要想做好,从这些方面着手
深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板
HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进入应用落地页查看详
深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板 深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板 深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板
斐讯 N1 刷机记录
Prerequisites USB 公对公线 Windows 操纵系统 AMLogic USB Burning Tool,安装后名字为 Aml_Burn_Tool。 降级 打开终端,输入 hdwwiz 打开添加硬件向导。 安装我手动从列表选择的硬件 &gt; 显示所有设备 -&gt; Amlogic
基于surging的木舟IOT平台如何添加网络组件
一 、 概述 为了弥补代码的遗失,木舟IOT平台正在加班加点进行研发,后面不只是针对于IOT设备接入上报,告警,视频管理,组态数据可视化大屏,后面还会有快速搭建微服务平台,利用surging.cli工具根据数据库表生成微服务,中间服务,能让程序员快速完成BOSS交给的任务,从而在这个内卷的社会能占有
基于surging的木舟IOT平台如何添加网络组件 基于surging的木舟IOT平台如何添加网络组件 基于surging的木舟IOT平台如何添加网络组件