在我的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元素的最后一步。
我不想要它,因为两个程序的空闲看起来都很丑陋,我想实际看到每个周期的渲染结果。
发布于 2012-12-27 06:31:38
我看到的主要问题是,你正在使用一个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;
}https://stackoverflow.com/questions/14040794
复制相似问题