【发布时间】:2017-02-28 19:00:38
【问题描述】:
我正在使用我的 UWP 项目处理 UI 动画。当我将 Storyboard 与基于用户在控件中的操作的 translate 变换结合起来时,在 Storyboard 开始动画后,似乎翻译不再起作用。
经过研究,我认为这是the reason - 动画后我无法更改属性的值,并且我必须删除情节提要,...不幸的是,这篇文章支持 WPF,因此我无法应用于我的 UWP 项目。那么有人知道这种情况的任何解决方案吗?
XAML:
<Frame x:Name="StoreFrame"
Grid.Row="1"
Grid.RowSpan="1"
MaxWidth="400"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
ManipulationDelta="StoreFrame_OnManipulationDelta"
ManipulationMode="TranslateY">
<Frame.RenderTransform>
<CompositeTransform x:Name="Transform" />
</Frame.RenderTransform>
</Frame>
操纵事件处理程序:
private void StoreFrame_OnManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
Transform.TranslateY += e.Delta.Translation.Y;
}
我的故事板动画:
private void ShowStoreFrameAnimation()
{
VerticalAnimatiton(StoreFrame, StoreFrame.ActualHeight, 0);
}
public void VerticalAnimatiton(DependencyObject controlObject,
double fromValue, double toValue, double durationTime = 1000)
{
//The animation things
var storyboard = new Storyboard();
var duration = new Duration(TimeSpan.FromMilliseconds(durationTime));
var ease = new CubicEase { EasingMode = EasingMode.EaseOut };
var animation = new DoubleAnimation
{
EasingFunction = ease,
Duration = duration
};
storyboard.Children.Add(animation);
animation.From = fromValue;
animation.To = toValue;
animation.EnableDependentAnimation = false;
Storyboard.SetTarget(animation, controlObject);
Storyboard.SetTargetProperty(animation, "(UIElement.RenderTransform).(CompositeTransform.TranslateY)");
storyboard.Begin();
}
【问题讨论】:
-
您应该使用 same
Storybard来处理用户操作 -Pause在用户交互开始时使用它 (ManipulationStarted),在交互过程中调用Seek(ManipulationDelta),最后是Resume,一旦交互结束 (ManipulationCompleted)。