经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
WPF 模仿前端大佬写一个Hover效果
来源:cnblogs  作者:BearHan  时间:2024/8/26 9:20:14  对本文有异议

先看一下效果吧:

 

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

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

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

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

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

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

  1. <Grid>
  2. <Grid x:Name="gd1" Height="400" Width="300">
  3. <Border Margin="50" CornerRadius="30">
  4. <Border.Background>
  5. <ImageBrush ImageSource="08.jpg"/>
  6. </Border.Background>
  7. </Border>
  8. </Grid>
  9. </Grid>

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

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

  1. <Grid x:Name="gd1" Height="400" Width="300">
  2. <Border CornerRadius="30" Margin="18">
  3. <Border.Effect>
  4. <BlurEffect Radius="20"/>
  5. </Border.Effect>
  6. <Border.Background>
  7. <ImageBrush ImageSource="08.jpg"/>
  8. </Border.Background>
  9. </Border>
  10. <Border Margin="50" CornerRadius="30">
  11. <Border.Background>
  12. <ImageBrush ImageSource="08.jpg"/>
  13. </Border.Background>
  14. </Border>
  15. </Grid>

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

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

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

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

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

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

  1. <Grid x:Name="gd1" Height="400" Width="300">
  2. <Border x:Name="bd2" BorderThickness="2" Visibility="Hidden" CornerRadius="30" Margin="15">
  3. <Border.BorderBrush>
  4. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  5. <GradientStop Color="#FF43D4F9"/>
  6. <GradientStop Color="#FFDF07FD" Offset="1"/>
  7. </LinearGradientBrush>
  8. </Border.BorderBrush>
  9. <Border.Clip>
  10. <EllipseGeometry x:Name="eg1" RadiusX="150" RadiusY="150" Center="150,200"/>
  11. </Border.Clip>
  12. <Border CornerRadius="30" Opacity="0.7">
  13. <Border.Background>
  14. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
  15. <GradientStop Color="#FF43D4F9"/>
  16. <GradientStop Color="#FFDF07FD" Offset="1"/>
  17. </LinearGradientBrush>
  18. </Border.Background>
  19. </Border>
  20. </Border>
  21. <Border CornerRadius="30" Margin="18">
  22. <Border.Effect>
  23. <BlurEffect Radius="20"/>
  24. </Border.Effect>
  25. <Border.Background>
  26. <ImageBrush ImageSource="08.jpg"/>
  27. </Border.Background>
  28. </Border>
  29. <Border Margin="50" CornerRadius="30">
  30. <Border.Background>
  31. <ImageBrush ImageSource="08.jpg"/>
  32. </Border.Background>
  33. </Border>
  34. </Grid>

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

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

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

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

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

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

  1. public MainWindow()
  2. {
  3. InitializeComponent();
  4. gd1.MouseMove += MainGrid_MouseMove;
  5. gd1.MouseLeave += Bd1_MouseLeave;
  6. gd1.MouseEnter += Bd1_MouseEnter;
  7. }
  8. private void Bd1_MouseEnter(object sender, MouseEventArgs e)
  9. {
  10. bd2.Visibility = Visibility.Visible;
  11. }
  12. private void Bd1_MouseLeave(object sender, MouseEventArgs e)
  13. {
  14. bd2.Visibility = Visibility.Hidden;
  15. }
  16. private void MainGrid_MouseMove(object sender, MouseEventArgs e)
  17. {
  18. //这里获取一下鼠标的坐标,然后让clip效果的中心跟着鼠标中心移动
  19. Point mousePosition = e.GetPosition(gd1);
  20. eg1.Center = new Point(mousePosition.X, mousePosition.Y);
  21. }

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

效果就完成了...

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

 

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

QQ技术交流群:332035933;

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

 

原文链接:https://www.cnblogs.com/lvpp13/p/18376098

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号