2016-06-08 3 views
-1

Я пытаюсь не полностью создать раскадровку в C#, не XAML на всех, но у меня возникают проблемы с (SetTarget и SetTargetProperty) .. вот мой кодСоздание раскадровки полностью программно C#

Я просто анимируя мой UserControl, когда пользователь переходит к нему, он переходит от 0 непрозрачности до 100 и от 900 TransformX к 0 в 0,5 секунды.

Я был бы очень признателен за любую помощь в настройке этих двух параметров, будь то в течение всего этого дня без везения!

public void Designer() 
    { 
     Control_ = new UserControl(); 

     Control_.HorizontalAlignment = HorizontalAlignment.Stretch; 
     Control_.VerticalAlignment = VerticalAlignment.Stretch; 

     Control_.Name = "Control_"; 
     this.AddChild(Control_); 

     CreateStoryboard(); 
    } 

    public void CreateStoryboard() 
    { 
     fadeinBoard = new Storyboard(); 
     Duration duration = new Duration(TimeSpan.FromMilliseconds(5)); 
     fadeinBoard.Duration = duration; 

     DoubleAnimationUsingKeyFrames animOpacity = new DoubleAnimationUsingKeyFrames(); 
     DoubleAnimationUsingKeyFrames animTransform = new DoubleAnimationUsingKeyFrames(); 

     animOpacity.Duration = duration; 
     animTransform.Duration = duration; 

     //Transform Function 
     KeyTime ktime1 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5)); 
     PowerEase pow = new PowerEase(); 
     pow.Power = 5; 
     pow.EasingMode = EasingMode.EaseOut; 
     EasingDoubleKeyFrame keyFrame1 = new EasingDoubleKeyFrame(0, ktime1, pow); 

     //Opacity Function 
     KeyTime ktime2 = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(.5)); 
     ExponentialEase expo = new ExponentialEase(); 
     expo.Exponent = 3; 
     expo.EasingMode = EasingMode.EaseOut; 
     EasingDoubleKeyFrame keyFrame2 = new EasingDoubleKeyFrame(1, ktime2, expo); 

     animOpacity.KeyFrames.Add(keyFrame1); 
     animTransform.KeyFrames.Add(keyFrame2); 

     // MY PROBLEM IS HERE 
     Storyboard.SetTarget(???, ???); 
     Storyboard.SetTarget(???, ???); 
     Storyboard.SetTargetProperty(???, ???); 
     Storyboard.SetTargetProperty(???, ???))); 

     fadeinBoard.Children.Add(animOpacity); 
     fadeinBoard.Children.Add(animTransform); 

     Control_.Resources.Add("fader", fadeinBoard); 
    } 
+0

Не должно быть: // МОЯ ПРОБЛЕМА ЗДЕСЬ ЗДЕСЬ Storyboard.SetTarget (animOpacity, Control_); Storyboard.SetTarget (animTransform, Control_); Storyboard.SetTargetProperty (animOpacity, новый PropertyPath («OpacityProperty»)); Storyboard.SetTargetProperty (animTransform, новый PropertyPath ((«RenderTransform.Children [0] .TransformX»))); ? –

+0

@BenJackson не работает Бен, с или без кавычек, я все время получаю исключения из этого целого раздела. Я просто не знаю, как установить это значение! – Acidburn73

+0

@BenJackson Я изменил свой вопрос, надеюсь, это сделает все более ясным, извините, прежде чем – Acidburn73

ответ

2

Это работает для меня следующее:

Storyboard.SetTarget(animOpacity, Control_); 
    Storyboard.SetTarget(animTransform, Control_); 
    Storyboard.SetTargetProperty(animOpacity, new PropertyPath("Opacity")); 
    Storyboard.SetTargetProperty(animTransform, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleY)")); 

Примечание коррекции от OpacityProperty к непрозрачности, и синтаксис полностью квалифицированного собственности - я настроил, чтобы это работало на ScaleY на данный момент ,

Это будет работать, только если вы добавили RenderTransform к элементу управления, к которому можно получить доступ, используя предоставленный путь, например. следующим образом:

ScaleTransform myScaleTransform = new ScaleTransform(); 
    myScaleTransform.ScaleY = 1; 
    myScaleTransform.ScaleX = 1; 
    TransformGroup myTransformGroup = new TransformGroup(); 
    myTransformGroup.Children.Add(myScaleTransform); 
    Control_.RenderTransform = myTransformGroup; 
+0

Невозможно точно знать, что все не так в коде без хорошего [mcve], предоставленного автором вопроса. Однако выше, как мне кажется, относится к наиболее вопиющей проблеме: неправильное значение передавалось как параметр DependencyObject для вызовов метода SetTargetProperty(). FWIW: я предпочитаю передавать фактическое значение DependencyProperty в конструктор 'PropertyPath'. Меньше «магических литералов» в коде таким образом. Например. 'Storyboard.SetTargetProperty (Control_, новый PropertyPath (UIElement.OpacityProperty));' –

+0

Большое спасибо @BenJackson, который помог многим Он работает так, как вы писали, теперь я просто должен выяснить, как настроить свойство Перевести. Но раскадровка, наконец, оживляет – Acidburn73

+0

@PeterDuniho, мне жаль, что вопрос не был достаточно ясным, я постараюсь предоставить более подробные сведения в будущем. Спасибо за помощь – Acidburn73

Смежные вопросы