所以我有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
)有更简单的方法来实现这一点
答案 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>