WPF/Silverlight实时渲染模糊效果



在我的WPF项目中,我已经完成了点击一些UI元素,如:

    void vb1_click(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        DispatcherTimer dt = new DispatcherTimer();
        dt.Interval = new TimeSpan(0, 0, 0, 0, 1000);
        dt.Tick += new System.EventHandler(dt_Tick);
        dt.Start();
    }
    void dt_Tick(object sender, System.EventArgs e)
    {
        for(int i = 0; i < 20; i++)
        {
            this.vb2_blur_eff.Radius = (double)i;
        }
    }

主要的问题是:"我无法看到每秒模糊效果的每一步。程序正在空闲,当这个过程完成后,它给了我模糊UI元素的最后一步。

我不想要它,因为两个程序空转看起来都很难看,我想看到每个周期的渲染结果

我看到的主要问题是,你正在使用一个For循环来设置你的模糊半径,所以它坐在那里把它调到最大,然后将控制返回给调度程序,然后更新它。我更喜欢用StoryBoard来做,但你也可以用Timer来做,让Timer在每次滴答时设置半径,当它达到最大值时就停止。您可以使用定时器的间隔来控制扩散的速度。我正在使用一个类级变量count。

void vb1_click(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    DispatcherTimer dt = new DispatcherTimer();
    dt.Interval = new TimeSpan(0, 0, 0, 0, 20);
    dt.Tick += new System.EventHandler(dt_Tick);
    count = 0;
    dt.Start();
}
void dt_Tick(object sender, System.EventArgs e)
{
    DispatcherTimer tmr = (DispatcherTimer)sender;
    this.vb2_blur_eff.Radius = (double)count;
    if (count == 20)
    {
        tmr.Stop();
        tmr.Tick -= new System.EventHandler(dt_Tick);
    }
    count += 1;
}