【问题标题】:use storyboard in code Behind in winrt在代码后面使用情节提要在winrt中
【发布时间】:2015-11-17 08:36:10
【问题描述】:

我需要一些帮助来将对象设置为圆形路径。为此,我在LoadEvent 中创建了一些Method 但我不知道将Storyboard 添加到此代码中。 Storyboard 应该在循环路径中更改我的Object 的位置。 循环路径由AngelToPointMethod 计算。 如果我 SetTargetPropertyTranslateXTranslateY 我的控制移动到直接路径,但我需要逐个移动天使。

这是我的代码

 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:propertyChangedAngle属性如何处理?

我所做的实现对吗?

我需要运行UpdatePosition,只是在Angle 的更改值不是所有属性时。

2:如何将SetTargetProperty 转为Angle 属性?

【问题讨论】:

标签: c# animation windows-runtime windows-phone-8.1 storyboard


【解决方案1】:

假设您有一个 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 找到 Storyboard 的 ref:

var stoaryboard = RootGrid.Resources["MyStoryboard"] as Stoaryboard;
stoaryboard.Begin();

【讨论】:

  • 谢谢@JuniperPhoton,但我的问题正如我上面所说的是如何在圈子中移动myControl。我最近尝试这样做,但我没有足够的知识来处理propertyChangedSetTargetProperty
  • 您能否具体说明您的情况,以便我提出更好的解决方案?
  • 根据上面的代码,我尝试制作一个具有矩形的自定义控件。所以当我的控件开始加载此矩形时,我需要通过情节提要在 Circle 中移动。我通过angleToPoint 计算了圆路径。我更新了我的问题请参阅上面的代码。再次“谢谢”@JuniperPhton
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 2012-03-22
  • 2019-12-17
  • 2011-12-28
  • 1970-01-01
  • 2013-11-14
  • 2014-03-01
  • 2012-04-24
相关资源
最近更新 更多