【发布时间】:2011-09-02 15:20:37
【问题描述】:
一段时间以来,我一直在尝试创建一个/一系列类,这些类在检测到相关对象的大小调整时,会尝试停止对象的大小调整并为其创建平滑的调整大小动画。 但是,在动画开始之前,我总是遇到对象在屏幕上以目标尺寸“闪烁”一秒钟的问题。
长话短说,经过一些认真的调试和自我怀疑,我的印象是调用Storyboard.Begin()直到下一个时钟滴答才影响目标值。我认为这与Storyboard.Seek() 直到下一个时钟滴答才会发生有关。 (See the MSDN Reference)。因此,在动画开始之前,对象会在单帧中采用其新高度,然后将其拉回起始高度。
我花了很长时间试图让它工作,因为它并不像看起来那么简单。我无法在FrameworkElement.SizeChanged 事件处理程序中将FrameworkElement.Height 设置为e.PreviousSize.Height,因为这会影响对象的“真实”高度。举例说明为什么这不起作用,如果在播放动画时某些东西改变了对象的“真实”高度,那么将 FrameworkElement.Height 重新设置为动画开始时收集的目标高度可以设置它作为一个不正确的、过时的值。
我尝试了更多的东西,我相信它们会随着答案的到来而出现,但您的任何想法都会非常感激。
【问题讨论】:
-
可能与您尝试做的完全不同,但是您是否尝试过扩展/修改/拆分 ExtendedVisualStateManager 的 FluidLayout 功能,该功能可以相对较好地处理类似情况?
-
@dain - 这几乎正是我想要的,但是当用于折叠或展开的
VisualState包含在每个实例的样式中时,它就不起作用了。在一种情况下,屏幕上有四个控件实例,ExtendedVisualStateManager仅在四个实例的容器包含状态时才有效,这在这种情况下是不可能的。 (我希望这是有道理的。)此外,我还必须处理由于内容变化而不是状态变化而改变大小的控件。不过谢谢!
标签: c# silverlight storyboard