1

在我的 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 元素的最后一步。

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

4

1 回答 1

2

我看到的主要问题是您正在使用 For 循环来设置模糊半径,因此它坐在那里将其调到最大值,然后将控制权返回给调度程序,然后调度程序对其进行更新。我更喜欢用 StoryBoard 来做,但你可以用定时器来做,让定时器在每个刻度上设置半径,当它达到最大值然后停止。您可以使用计时器的时间间隔来控制扩散的速度。我正在使用一个名为 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;
}
于 2012-12-26T22:31:37.890 回答