You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF应用中实现Grid控件的渐入渐出模糊效果需求

实现WPF Grid控件的模糊淡入淡出动画

嘿,我来帮你搞定这个平滑的模糊过渡需求!首先得提一句:你现在用的BitmapEffect其实是WPF里的旧API(从.NET 3.5开始就被标记为过时了),它是纯软件渲染的,性能不如后来推出的BlurEffect(属于System.Windows.Media.Effects命名空间),而且后者更适合做动画。

下面直接给你能实现淡入淡出模糊的方案:

核心思路

通过WPF的DoubleAnimation来动态修改BlurEffect的Radius属性值,让模糊强度从当前值平滑过渡到目标值(或者反过来),从而实现自然的淡入/淡出效果。

完整代码实现

首先确保你的项目引用了PresentationCore和PresentationFramework程序集,然后添加以下方法:

using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Animation;

private void AnimateBlur(Grid targetGrid, double targetRadius, TimeSpan duration)
{
    // 先获取或创建BlurEffect(避免重复创建)
    var blurEffect = targetGrid.Effect as BlurEffect ?? new BlurEffect();
    
    // 停止之前可能存在的动画,避免多个动画冲突
    blurEffect.BeginAnimation(BlurEffect.RadiusProperty, null);
    
    // 创建模糊半径变化的动画
    var blurAnimation = new DoubleAnimation
    {
        From = blurEffect.Radius, // 从当前模糊强度开始过渡
        To = targetRadius,        // 过渡到目标模糊强度
        Duration = duration,      // 动画持续时长
        FillBehavior = FillBehavior.HoldEnd // 动画结束后保持最终状态
    };
    
    // 给BlurEffect的Radius属性应用动画
    blurEffect.BeginAnimation(BlurEffect.RadiusProperty, blurAnimation);
    
    // 将配置好的Effect绑定到目标Grid上
    targetGrid.Effect = blurEffect;
}

使用方式

  • 启动模糊淡入:
    // 用0.5秒时间,把模糊半径从当前值平滑过渡到30
    AnimateBlur(myGrid, 30, TimeSpan.FromSeconds(0.5));
    
  • 恢复清晰淡出:
    // 用0.5秒时间,把模糊半径从当前值平滑过渡到0
    AnimateBlur(myGrid, 0, TimeSpan.FromSeconds(0.5));
    

额外优化建议

  1. 性能提升:BlurEffect是硬件加速的,相比旧的BitmapEffect,在动画过程中会更流畅,尤其是在高分辨率屏幕或者复杂UI场景下。
  2. 自定义过渡曲线:如果想要更自然的动画效果,可以给DoubleAnimation添加缓动函数,比如:
    blurAnimation.EasingFunction = new SineEase { EasingMode = EasingMode.EaseInOut };
    
  3. 动画控制:如果需要中途暂停或取消动画,只需调用blurEffect.BeginAnimation(BlurEffect.RadiusProperty, null)即可停止当前动画。

内容的提问来源于stack exchange,提问作者Deet Glol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:59:34