首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF/Silverlight实时渲染模糊效果

WPF/Silverlight实时渲染模糊效果
EN

Stack Overflow用户
提问于 2012-12-26 20:47:03
回答 1查看 235关注 0票数 1

在我的WPF项目中,我点击了一些UI元素,比如:

代码语言:javascript
复制
    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元素的最后一步。

我不想要它,因为两个程序的空闲看起来都很丑陋,我想实际看到每个周期的渲染结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-27 06:31:38

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

代码语言:javascript
复制
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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14040794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档