在我的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;
}