使用缩放变换缩放面板时,应用程序需要将面板重置回原始大小。为此,重置按钮启动一个双动画,动画缩放比例从它的起始值变为1,这意味着面板将具有原始值。
视觉上面板缩小到原始尺寸,但在动画结束后,故事板的完整事件被引发两次,并且一旦这两个事件都被提升,比例变换的值将被设置回它具有的值。在动画之前。
private void ResetButton_Click(object sender, RoutedEventArgs e)
{
if (!isReseting)
{
isReseting = true;
this.doubleAnimation = new DoubleAnimation(1, new Duration(new TimeSpan(0,0,0, 1)), FillBehavior.Stop);
this.resetStoryboard = new Storyboard();
resetStoryboard.Children.Add(doubleAnimation);
Storyboard.SetTarget(doubleAnimation, zoomSliderControl);
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(RangeBase.ValueProperty));
resetStoryboard.RepeatBehavior = new RepeatBehavior(1);
resetStoryboard.Completed += new EventHandler(ResetStoryboardCompleted);
resetStoryboard.Begin();
}
}
private void ResetStoryboardCompleted(object sender, EventArgs e)
{
if (resetStoryboard != null)
{
//resetStoryboard.Stop(zoomSliderControl);
//resetStoryboard.Remove(zoomSliderControl);
}
resetStoryboard = null;
doubleAnimation = null;
isReseting = false;
}
例如,如果Slider控件(名为zoomSliderControl)的值在动画之前为1.5,那么它会按预期动画回到1,但是一旦resetStoryBoard的已完成事件被提升两次,它将再次设置为1.5
我已经尝试调试应用程序,它就在第二个ResetStoryboardCompleted方法确定该值设置为其原始值之后,所以我猜测我没有正确配置故事板或动画。
答案 0 :(得分:1)
显然,故事板的默认行为是在完成或(?)停止后恢复为原始值。因此,解决此问题的方法是在故事板完成时将zoomSliderControl的值设置为所需的值。