WPF 模仿前端大佬写一个Hover效果
先看一下效果吧:

原博主的地址:【动画进阶】神奇的卡片 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的,还有很多萌妹.
WPF 模仿前端大佬写一个Hover效果的更多相关文章
- 设计模式 - 动态代理原理及模仿JDK Proxy 写一个属于自己的动态代理
本篇文章代码内容较多,讲的可能会有些粗糙,大家可以选择性阅读. 本篇文章的目的是简单的分析动态代理的原理及模仿JDK Proxy手写一个动态代理以及对几种代理做一个总结. 对于代理模式的介绍和讲解,网 ...
- [前端]如何写一个水平导航栏?(浮动、inline-block+消除间距)
在看W3school时,看到一个很好的例子,如何制作一个水平的导航栏?没有任何要求,只需要达到下面的效果: 我认为这个例子包含了很多css布局需要了解的知识,因此单独写一下. W3school上面的方 ...
- WPF在后台中写一个鼠标移入移出的操作
在这个问题上我纠结了好久就是为了一个问题就是forebackground这个属性 lblPwd.Foreground = Brushes.Black;我以前一直以为是fontground这个属性可是我 ...
- 模仿猫眼电影App一个动画效果
看真正的猫眼效果图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/font/5a6L5L2T/fontsize/400/f ...
- 用C3中的animation和transform写的一个模仿加载的时动画效果
用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h ...
- 一个简单的tr:hover效果
昨天,搞项目的时候,在一个小问题上卡了40分钟,现在想想,还是平时比较少去注意一些细节,经过这次,一定要去多注意细节了. 好了废话不多说,我现在说明下遇到的问题,一个表格中,要求是当鼠标滑过每一行时, ...
- 纯后端尝试写一个前端slide插件
概述 由于项目组前端人员缺失,又赶上需要在手机端做一个slide效果的页面,所以只能自己硬着头皮上了,写的很简单,请大家不要笑话,只是拿出来分享下,大家先看下完成后的效果,如下: 过程 看了效果图是不 ...
- 用ES6的class模仿Vue写一个双向绑定
原文地址:用ES6的class模仿Vue写一个双向绑定 点击在线尝试一下 最终效果如下: 构造器(constructor) 构造一个TinyVue对象,包含基本的el,data,methods cla ...
- 写一个去除AI2XAML注释及多余数字位数的WPF窗体程序
原文:写一个去除AI2XAML注释及多余数字位数的WPF窗体程序 使用正则表达式去除多余注释及冗余数字位,关键代码: string pattern = @"/b(/d+ ...
- 模仿.NET框架ArrayList写一个自己的动态数组类MyArrayList,揭示foreach实现原理
通过.NET反编译工具可以查看到ArrayList内部的代码,发现ArrayList并非由链表实现,而是由一个不断扩容的数组对象组成. 下面模仿ArrayList写一个自己的MyArrayList. ...
随机推荐
- 高通平台mm-camera上电时序
高通平台mm-camera上电时序 背景 作为高通平台Camera知识的一种补充. 参考文档:https://blog.csdn.net/m0_37166404/article/details/649 ...
- 解决python命令行报错问题
解决Python报错Failed calling sys.__interactivehook__ 报错截图 可以看到主要的报错信息 File "D:\Python\Anaconda3\lib ...
- jsp---------------------复选框,全选按钮
js部分:注意:<script type="text/javascript" ></script>内不能有其他内容,否则会无效,若有则另起一对<scr ...
- P5327 题解
考虑把贡献摊到每个点上计算,每个点带来的贡献实际上是经过它的路径并大小,算完求和之后在除以 \(2\) 就得到了答案. 考虑怎么计算路径并大小. 考虑这样一个办法,将所有路径的起始点和终点按照 DFS ...
- Java(screw)生成数据库表结构
数据库支持 MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB(2016) 文档生成支持 html word markdown 方式一:代码 ...
- Docker使用Dockerfile部署项目
什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成镜像. 如何通过do ...
- javaweb使用gson工具使浏览器返回json数据
1.什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: (2)序列化:对象序列化的最主要的用处就是在传递和保 ...
- 通俗讲解promise
JavaScript 中的 Promise 是一种特殊的对象,它用于解决异步编程中的复杂性问题,特别是回调的问题.我们可以把它比喻成现实生活中的一个"承诺": 想象一下,你 ...
- 使用forEach循环异步方法,导致使用深拷贝时,得不到最新数据,控制台会打印出最新的数据
在使用forEach循环遍历一个数组,如果循环时有异步方法,会导致最终深拷贝得不到最新数据,但是控制台会打印最新的数据 `const arr = [ { name: "Jone", ...
- el-config-provider
el-config-provider是Element Plus库中的一个组件,用于提供全局的配置.它是Element Plus在2.0版本中引入的新组件. el-config-provider组件的作 ...