WPF 模仿前端大佬写一个Hover效果

news/2024/11/17 6:56:57/文章来源:https://www.cnblogs.com/lvpp13/p/18376098

先看一下效果吧:

 

原博主的地址:【动画进阶】神奇的卡片 Hover 效果与 Blur 的特性探究 - ChokCoco - 博客园 (cnblogs.com)

原效果是一个css效果,我们采用WPF的方式模仿一下

因为技术有限,没有原博主的那么好看,毕竟盗版永远比不过原版...

然后这里看一下盗版的怎么写吧

先是拿到原版的图片(原博客里面有图片地址),当然也可以自己挑一张自己喜欢的图片,把图片保存到自己的WPF项目下面

 再把图片运用到代码里面去,给一个border的背景设置成图片,再给border设置一个圆角,就会得到一个圆角的图片

    <Grid><Grid x:Name="gd1" Height="400" Width="300"><Border Margin="50" CornerRadius="30"><Border.Background><ImageBrush ImageSource="08.jpg"/></Border.Background></Border></Grid></Grid>

然后再给图片添加一个模糊效果

模糊效果的实现就是在图片的下面一层添加一个同样的border,但是设置不同的margin,让它比正常显示的图片大一圈

<Grid x:Name="gd1" Height="400" Width="300">
    <Border CornerRadius="30" Margin="18"><Border.Effect><BlurEffect Radius="20"/></Border.Effect><Border.Background><ImageBrush ImageSource="08.jpg"/></Border.Background></Border><Border Margin="50" CornerRadius="30"><Border.Background><ImageBrush ImageSource="08.jpg"/></Border.Background></Border>
</Grid>

红色部分就是添加的模糊层,添加以后就会得到下面的效果

 然后最重要的就是剩下的hover效果了:

我们先准备一个背景色,原版的背景色我不知道怎么实现,所以只能用不同的背景色做为底色了

把这个背景放到最下面就会得到下面的效果(这里遇到个问题,不知道怎么把超出border以外的虚化效果裁掉,导致border以外也有一点点的模糊效果)

(原博是通过设置外层的overflow: hidden; 来实现的,但是我不知道wpf怎么实现这个效果,查了半天也没查到)

代码如下,就是就是一个带有渐变色的border

<Grid x:Name="gd1" Height="400" Width="300"><Border x:Name="bd2" BorderThickness="2" Visibility="Hidden" CornerRadius="30" Margin="15"><Border.BorderBrush><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="#FF43D4F9"/><GradientStop Color="#FFDF07FD" Offset="1"/></LinearGradientBrush></Border.BorderBrush><Border.Clip><EllipseGeometry x:Name="eg1" RadiusX="150" RadiusY="150" Center="150,200"/></Border.Clip><Border CornerRadius="30" Opacity="0.7"><Border.Background><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="#FF43D4F9"/><GradientStop Color="#FFDF07FD" Offset="1"/></LinearGradientBrush></Border.Background></Border></Border><Border CornerRadius="30" Margin="18"><Border.Effect><BlurEffect Radius="20"/></Border.Effect><Border.Background><ImageBrush ImageSource="08.jpg"/></Border.Background></Border><Border Margin="50" CornerRadius="30"><Border.Background><ImageBrush ImageSource="08.jpg"/></Border.Background></Border>
</Grid>

然后就是实现hover效果,在实现hover效果以前先给bd2添加一个clip效果

UIElement.Clip 属性 (System.Windows) | Microsoft Learn

关于clip的解释,可以看一下微软对于clip效果的说明

<Border.Clip><EllipseGeometry x:Name="eg1" RadiusX="150" RadiusY="150" Center="150,200"/>
</Border.Clip>

把这段代码放到明为bd2的border下面就可以了

但是还需要一些后台代码,控制一下这个clip的移动,我们给最外层的名为gd1的grid添加几个事件

public MainWindow()
{InitializeComponent();gd1.MouseMove += MainGrid_MouseMove;gd1.MouseLeave += Bd1_MouseLeave;gd1.MouseEnter += Bd1_MouseEnter;
}private void Bd1_MouseEnter(object sender, MouseEventArgs e)
{bd2.Visibility = Visibility.Visible;
}private void Bd1_MouseLeave(object sender, MouseEventArgs e)
{bd2.Visibility = Visibility.Hidden;
}private void MainGrid_MouseMove(object sender, MouseEventArgs e)
{//这里获取一下鼠标的坐标,然后让clip效果的中心跟着鼠标中心移动Point mousePosition = e.GetPosition(gd1);eg1.Center = new Point(mousePosition.X, mousePosition.Y);
}

然后我们让默认情况下bd2的 Visibility="Hidden" 

效果就完成了...

如果有更好的解决办法,可以和我联系哦。

 

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

QQ技术交流群:332035933;

欢迎进群讨论问题,不论是winform,还是wpf,还是.net core的,还有很多萌妹.

 

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

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

相关文章

信息收集利器|一款功能强大的子域收集工具

01工具介绍 (下载地址见最后) 在hw等攻防演练中,信息收集做为演练厨师阶段最重要的步骤,方式方法尤为重要,好的工具达到事半功倍的效果。OneForAll是一款集百家之长,功能强大的全面快速子域收集终极神器。 解决以下痛点: 在渗透测试中信息收集的重要性不言而喻,子域收集…

[poc] hw情报-泛微 e-cology v10 远程代码执行漏洞

漏洞介绍 (poc下载地址见最后)泛微披露了e-cology远程代码执行漏洞。该漏洞允许攻击者通过e-cology-10.0前台获取管理员访问令牌,然后利用JDBC反序列化,实现远程代码执行。 漏洞描述通过/papi/passport/rest/appThirdLogin接口获取管理员账号票据,根据该票据获取访问令牌,…

Tita的OKR :产品经理的OKR

产品经理制定的OKR,对组织发展有重大的意义,它能促使产品经理,产品团队,乃至是公司全体员工走出舒适区,超越能力边界。正因为挑战的存在,才使得产品经理才有忧患意识,不断改进产品,从而适应竞争激烈的市场。只有不断改善、创新和突破,才能让产品经理的能力不断提升,才…

About Living 生存之道

About Living 生存之道 爱 健康 财富 是人生值得追求的东西!人生不过是一段体验。我们都是时间的囚徒,活在当下。有趣!有料! 一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程---奋斗是加法,趋势是乘法 我相信这世界上,有些人有些事有些爱,在见到的第一次,…

JAVA 封装

封装 1.“高内聚,低耦合” 2.属性私有 alt+insert创建get/set方法,方法内部可以进行判断参数是否合法 意义:1.提高程序的安全性,保护数据 2.隐藏代码的实现细节 3.统一接口(get/set方法) 4..增加系统的可维护性 成员变量的隐藏 “就近原则”,子类新定义的方法可以…

怎么都在劝我用通义灵码

听朋友说最近通义灵码有个活动,分享体验心得就有机会抽 iPhone 15。而且通过活动第一次使用通义灵码的新用户,还人均送一个“显眼包”。听朋友说最近通义灵码有个活动,分享体验心得就有机会抽 iPhone 15。而且通过活动第一次使用通义灵码的新用户,还人均送一个“显眼包”。…

卡特兰数、Prufer 序列、BSGS 总结

卡特兰数 定义 给定 \(n\) 个 \(0\) 和 \(n\) 个 \(1\),它们构成一个长度为 \(2n\) 的排列,满足任意前缀中 \(0\) 的个数都不少于 \(1\) 的个数的序列的数量为卡特兰数列。显然 \(H_0=H_1=1\)。(\(H\) 为卡特兰数列) 通项公式: \[H_n=\frac{\dbinom{2n}{n}}{n+1}\quad (n\…

[Flink] Flink CDC Connactors FAQ

Flink CDC Connactors FAQ 近期遇到 Flink CDC 的问题较多,故基于第1篇参考文献的FAQ文档基础之上,对这些问题做个系统的总结。 MYSQL CDC Q:作业报错 ConnectException: A slave with the same server_uuid/server_id as this slave has connected to the master,怎么办呢?…

少儿编程概述

少儿编程少儿编程 技术参考少儿编程的核心理念是培养孩子思维模式,解决问题逻辑等综合能力,与传统意义上的编程有很大区别。前者培养能力,后者专注技术。国外少儿编程较国内更早开始发展,主要代表有开源平台Scratch以及拥有成熟体系的Tynker。Scratch语言 与 编程猫的Kitte…

《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一)

《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质…

【HW系列+技战法】搞定通信加密,力防数据泄露

一、 通信加密流程二、密钥协商算法三、密钥生成四、 密钥交换五、密钥存储原创 菜鸟学信安移动互联网主流的网络通信方式面临诸多风险: 算法破解、协议破解、中间人攻击…… 攻击者利用多种攻击方式,不断对移动应用发起攻击。 在移动应用未做有效保护措施的情况下,如果加密…

基础组件:表单

实际业务中,在正式向服务器提交数据前,都会对各个输入框数据进行合法性校验,但是对每一个TextField都分别进行校验将会是一件很麻烦的事。还有,如果用户想清除一组TextField的内容,除了一个一个清除有没有什么更好的办法呢?为此,Flutter提供了一个Form 组件,它可以对输…