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

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

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

编程知识
2024年08月23日 14:48

先看一下效果吧:

 

原博主的地址:【动画进阶】神奇的卡片 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的,还有很多萌妹.

 

From:https://www.cnblogs.com/lvpp13/p/18376098
本文地址: http://shuzixingkong.net/article/1381
0评论
提交 加载更多评论
其他文章 JuiceFS 在多云架构中加速大模型推理
在大模型的开发与应用中,数据预处理、模型开发、训练和推理构成四个关键环节。本文将重点探讨推理环节。在之前的博客中,社区用户 BentoML 和贝壳的案例提到了使用 JuiceFS 社区版来提高模型加载的效率。本文将结合我们的实际经验,详细介绍企业版在此场景下的优势。 下图是一个典型的大模型推理服务的
JuiceFS 在多云架构中加速大模型推理 JuiceFS 在多云架构中加速大模型推理 JuiceFS 在多云架构中加速大模型推理
AI的那些名词
AI 是什么? Artificial Intelligence,即人工智能,1956年于Dartmouth学会上提出,一种旨在以类似人类反应的方式对刺激做出反应并从中学习的技术,其理解和判断水平通常只能在人类的专业技能中找到。AI因具备自主学习和认知能力,可进行自我调整和改进,从而应对更加复杂的任务
《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一)
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限
《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一) 《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一) 《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一)
线性dp:最长公共子序列
最长公共子序列 本文讲解的题与leetcode1143.最长公共子序列这题一样,阅读完可以挑战一下。 力扣题目链接 题目叙述: 给定两个字符串,输出其最长公共子序列,并输出它的长度 输入: ADABEC和DBDCA 输出: DBC 3 解释 最长公共子序列是DBC,其长度为3 动态规划思路: 我们这
线性dp:最长公共子序列 线性dp:最长公共子序列 线性dp:最长公共子序列
Go 互斥锁 Mutex 源码分析 (一)
原创文章,欢迎转载,转载请注明出处,谢谢。 0. 前言 锁作为并发编程中的关键一环,是应该要深入掌握的。 1. 锁 1.1 示例 实现锁很简单,示例如下: var global int func main() { var mu sync.Mutex var wg sync.WaitGroup for
Go 互斥锁 Mutex 源码分析 (一) Go 互斥锁 Mutex 源码分析 (一)
平衡搜索树-AVL树 图文详解 (万字长文)
目录AVL树AVL树的概念AVL树节点的定义:AVL树的插入基本情况分析平衡因子对应的操作旋转操作分析需要旋转的情况结论4种旋转操方法与特征6种双旋平衡因子特征代码实现四种旋转实现插入操作实现树高度与是否平衡树判断实现其他实现插入验证BenchMark环境测试工具和方法测试结果: AVL树 AVL树
平衡搜索树-AVL树  图文详解  (万字长文) 平衡搜索树-AVL树  图文详解  (万字长文) 平衡搜索树-AVL树  图文详解  (万字长文)
一文讲清楚static关键字
static能修饰的地方 静态变量 静态变量: 又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来访问它;静态变量在内存中只存在一份。 实例变量: 每创建一个实例就会产生一个实例变量,它与该实例同生共死。 静态方法 静态方法在类加载的时候就存在了,它不依赖于任何实
线性dp:编辑距离
编辑距离 本题与力扣72.编辑距离题意一样,阅读完本文可以尝试leetcode72. 力扣题目链接 题目叙述 输入两个字符串a,b。输出从字符串a修改到字符串b时的编辑距离 输入 NOTV LOVER 输出 4 题目解释: 动态规划思路 这个问题显然是一个最优解问题,我们可以考虑动态规划的思路,那么
线性dp:编辑距离 线性dp:编辑距离 线性dp:编辑距离