淡化模糊元素

时间:2018-04-05 11:19:35

标签: wpf animation fade

所以我有WPF应用程序,并且在某些时候,当我的应用程序执行其中的内容时,我希望blur我的网格与我的所有控制器在特定时间内然后回来,所以目前我正在使用此方法:

private void BlurElement(Grid grid, double value)
{
    Grid g = grid;
    BlurBitmapEffect blurEffect = new BlurBitmapEffect();
    blurEffect.Radius = value;
    g.BitmapEffect = blurEffect;
}

用法

BlurElement(myGrid, 30);

然后回复:BlurElement(myGrid, 0);

所以这个工作正常,但现在我希望这个模糊与淡入淡出元素一起发生,所以我创建了这个计时器:

private DispatcherTimer fadeTimer;

fadeTimer = new DispatcherTimer();
fadeTimer.Tick += FadeTimer_Tick;
fadeTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);

Timer打勾:

private void FadeTimer_Tick(object sender, EventArgs e)
{
    BlurElement(myGrid, count += 1);
    if (counter == 30)
        fadeTimer.Stop();
}

然后逐渐完成。

所以我的问题是,如果没有这个Timer或者某个库(我主要使用Windows7)有更简单的方法来实现这一点

1 个答案:

答案 0 :(得分:1)

除了在每个计时器刻度上创建新的BlurBitmapEffect效率低下之外,WPF BitmapEffects是可动画的。所以你可以简单地在XAML中声明效果

<Grid>
    <Grid.BitmapEffect>
        <BlurBitmapEffect x:Name="blurBitmapEffect" Radius="0"/>
    </Grid.BitmapEffect>
    ...
</Grid>

在代码后面的某处开始动画:

blurBitmapEffect.BeginAnimation(
    BlurBitmapEffect.RadiusProperty,
    new DoubleAnimation(30, TimeSpan.FromSeconds(3)));

或者只是在XAML中做所有事情,例如像这样:

<Grid.BitmapEffect>
    <BlurBitmapEffect Radius="0"/>
</Grid.BitmapEffect>
<Grid.Triggers>
    <EventTrigger RoutedEvent="Loaded">
        <BeginStoryboard>
            <Storyboard>
                <DoubleAnimation
                    Storyboard.TargetProperty="BitmapEffect.Radius"
                    To="30" Duration="0:0:3"/>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Grid.Triggers>