我对很多 WPF 还不是很熟悉,所以如果这个查询暴露了一些明显的误解,我会很感激他们被指出。
我想要做的(无论好坏)是将 aDoubleAnimation.FromProperty
与包含/运行动画的 StackPanel 的实际宽度同步。
我最初尝试使用数据绑定来执行此操作,例如
BindingOperations.SetBinding(anim,
DoubleAnimation.FromProperty,
new Binding {Source = panel, Path = new PropertyPath(ActualWidthProperty)});
但这似乎不起作用。虽然我可以将一个文本框绑定到 From 属性并看到它正在发生变化,但动画仍然从初始值开始运行。这与故事板冻结有关吗?(我对此一无所知,但只是听说过)
然后我想为什么不停止并重新启动故事板(将其关闭然后再打开!),同时通过处理StackPanel.SizeChanged
事件来更改 FromProperty。像这样的东西:
void panel_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (myStoryBoard != null && myStoryBoard.GetCurrentState(panel) == ClockState.Active)
{
myStoryBoard.Stop(panel);
foreach(var child in myStoryBoard.Children)
{
var anim = child as DoubleAnimation;
if (anim == null) continue;
anim.From = panel.ActualWidth;
}
myStoryBoard.Begin(panel, true);
}
}
这可行,但是,当然,每次调整面板大小时,它都会从头开始动画。我更喜欢的是能够从中断点恢复动画,但使用新的 FromProperty。这甚至可能吗?