0

Мне нужна помощь, чтобы анимировать объект в Circular path. для этого я создаю Method в LoadEvent Но я не собираюсь добавлять Storyboard в этот код. Storyboard должен изменить местоположение моего Object в Круговом пути. Круговой путь Расчет по AngelToPointMethod. Если я SetTargetProperty до TranslateX и TranslateY мой контроль переместится на прямой путь, но мне нужно переместить ангела ангелом.использовать раскадровку в коде. За winrt

вот мой код

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; 
    } 

} 

Update

Я обновил свой код, как и выше, но я столкнулся с двумя новой проблемы

1: как справиться с propertyChanged из Angle собственности?

Выполнение, которое я сделал, не так ли?

Мне нужно запустить UpdatePosition только когда значение изменения Angle не все Свойства.

2: как SetTargetProperty до Angle недвижимость?

+0

Может быть, как вдохновение: http://www.charlespetzold.com/blog/2012/03/The-Animated-Pie-Slice- in-Windows-8.html – WiredPrairie

ответ

0

Предположим, что у вас есть 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> 

Вы можете использовать х: Имя атрибута, чтобы позволить вам найти рамку в вашем сСт. И вы можете найти реф вашей раскадровки по его х: Имя:

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

Спасибо @JuniperPhoton, но моя проблема Как я уже говорил выше, как переместить 'myControl' в Circle. Я недавно пытался это сделать, но у меня недостаточно знаний для обработки 'propertyChanged' и' SetTargetProperty'. –

+0

Можете ли вы указать свой случай, чтобы я мог найти лучшее решение? – JuniperPhoton

+0

В соответствии с вышеприведенным кодом я пытаюсь создать собственный элемент управления, у которого есть прямоугольник. Мне нужно, когда мой элемент управления начнет загружать этот прямоугольник в Круге по раскадровке. i рассчитан круговой путь 'angleToPoint'. Я обновил свой вопрос. Пожалуйста, см. выше код. «Спасибо» снова @JuniperPhton –