[英]use storyboard in code Behind in winrt
我需要一些帮助将对象设置为循环路径的动画。 为此,我在LoadEvent
创建了一些Method
,但是我不知道将Storyboard
添加到此代码中。 Storyboard
应在循环路径中更改我的Object
的位置。 用AngelToPointMethod
计算的圆形路径。 如果我将SetTargetProperty
为TranslateX
和TranslateY
控件将移至“直接路径”,但我需要逐个天使移动。
这是我的代码
public class Test : Canvas
{
private int StartAngle = 215;
private Rectangle _myControl = new Rectangle();
private double _angle;
public double Angle
{
get { return _angle;}
set {_angle = value;}
}
public Test()
{
Loaded += OnLoaded;
}
private void OnLoaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
// UpdatePosition(_myControl, StartAngle);
AnimatePositionAtTheFrist(StartOuterAngle);
}
static void OnPropertyChanged(DependencyObject obj,
DependencyPropertyChangedEventArgs args)
{
(obj as CircularSliderControl).OnPropertyChanged(args);
}
void OnPropertyChanged(DependencyPropertyChangedEventArgs args)
{
UpdatePosition(_myControl, StartAngle);
}
private void AnimatePositionAtTheFrist( int startAngle)
{
Duration duration = new Duration(TimeSpan.FromSeconds(1));
Storyboard sb = new Storyboard();
sb.Duration = duration;
//var da = new DoubleAnimationUsingKeyFrames();
var da = new DoubleAnimation();
da.EnableDependentAnimation = true;
da.Duration = duration;
da.From = 0;
da.To = startAngle;
SineEase easingFunction = new SineEase();
easingFunction.EasingMode = EasingMode.EaseOut;
da.EasingFunction = easingFunction;
Storyboard.SetTarget(da, this);
Storyboard.SetTargetProperty(da, "Angle"); // error: Cannot resolve TargetProperty Angle on specified object.
sb.Children.Add(da);
sb.Begin();
}
private void UpdatePosition(Rectangle _myControl, int StartAngle)
{
var startPoint = AngelToPoint(StartAngle);
var tr = new CompositeTransform();
tr.TranslateX = startPoint.X;
tr.TranslateY = startPoint.Y ;
_myControl.RenderTransform = tr;
}
}
我如上所述更新了代码,但遇到了两个新问题
1:如何处理propertyChanged
的Angle
属性?
我执行的实现对吗?
我需要运行UpdatePosition
正当的变化值Angle
并不是所有的属性。
2:如何将SetTargetProperty
为Angle
属性?
假设您有一个KeyFrame定义为:
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="PaneGrid">
<EasingDoubleKeyFrame x:Name="Frame1" KeyTime="0:0:0.1" Value="1"/>
<EasingDoubleKeyFrame x:Name="Frame2" KeyTime="0:0:0.4" Value="1"/>
</DoubleAnimationUsingKeyFrames>
您可以使用x:Name属性让您在cs中找到Frame。 您可以通过x:Name找到情节提要的参考:
var stoaryboard = RootGrid.Resources["MyStoryboard"] as Stoaryboard;
stoaryboard.Begin();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.