WPF 动画:如何检测是否有动画正在进行?

8

有没有一种快速的方法来确定WPF控件中是否正在处理任何动画。

我有一个树形视图,我正在为树节点的展开动画,我希望在滚动焦点项到视图之前等待所有这些动画完成。 我不想独立地跟踪所有我的storyboard的进度。

理想情况下,我的伪代码应该如下所示:

myTreeView.ExpandAll(); // I have written this part

while (myTreeView.IsAnimating()) // I need the 'IsAnimating' property or extension method
{
   // wait
}

selectedTreeviewItem.BringIntoView(); // I have written this too.

1
你尝试过使用Storyboard的“完成”事件吗? - codymanix
由于有多个故事板在播放(每个展开的树视图项都有一个),我不确定何时会完成最后一个。 - Cameron Peters
所以,在你的故事板开始事件中增加一个计数器,在完成事件中减少计数器,如果在减少后计数器为零,则所有动画都已完成。 - Brent Stewart
1个回答

1

为什么不使用故事板的 completed event 呢?您将必须使用事件或不同的线程,否则您将使用 while 语句阻塞 UI 线程,并且不会播放任何动画。


1
这就是我试图避免的,因为我会同时触发1到x个动画...不过这是我正在考虑的一个备选方案。 - Cameron Peters
你的答案基本上就是它了。我所缺少的是在myTreeView的静态构造函数中使用EventManager.RegisterClassHandler(...,Storyboard.CompletedEvent,...),以便我可以观察所有动画完成。 - Cameron Peters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接