2017-10-15 6 views
0

J'ai écrit l'animation statique avec DoubleAnimationUsingKeyFrames:Comment écrire DoubleAnimationUsingKeyFrames dynamiques avec C# et XAML

<Storyboard x:Name="MyCount" Completed="MyCount_Completed"> 
      <DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetName="MyProgressBar" Storyboard.TargetProperty="(RangeBase.Value)"> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:0" Value="100"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:1" Value="90"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:2" Value="80"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:3" Value="70"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:4" Value="60"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="50"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:6" Value="40"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:7" Value="30"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:8" Value="20"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:9" Value="10"/> 
       <DiscreteDoubleKeyFrame KeyTime="0:0:10" Value="0"/> 
      </DoubleAnimationUsingKeyFrames> 
     </Storyboard> 

J'aime faire ce code (valeur et les parties temps) dynamique avec C#. Comment puis-je faire cela?

Répondre

1
<Storyboard x:Name="MyCount" Completed="MyCount_Completed"> 
     <DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" Storyboard.TargetName="MyProgressBar" Storyboard.TargetProperty="(RangeBase.Value)"> 
     <DiscreteDoubleKeyFrame KeyTime="{Binding MyStoryboardTimeKeyframeA}" Value="{Binding MyStoryboardValueKeyframeA}"/> 
    </DoubleAnimationUsingKeyFrames> 

Dans votre modèle de vue ou quel que soit votre classe de contexte de données est:

public class MyViewModel : INotifyPropertyChanged 
{ 
    private double _myStoryboardValueKeyframeA; 
    public double MyStoryboardValueKeyframeA 
    { 
     get 
     { 
      return _myStoryboardValueKeyframeA; 
     } 
     set 
     { 
      _myStoryboardValueKeyframeA = value; 
      OnPropertyChanged("MyStoryboardValueKeyframeA"); 
     } 
    } 

    private TimeSpan _myStoryboardTimeKeyframeA; 
    public TimeSpan MyStoryboardTimeKeyframeA 
    { 
     get 
     { 
      return _myStoryboardTimeKeyframeA; 
     } 
     set 
     { 
      _myStoryboardTimeKeyframeA = value; 
      OnPropertyChanged("MyStoryboardTimeKeyframeA"); 
     } 
    } 

    protected void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
      handler(this, e); 
    } 

    public void OnPropertyChanged(string propertyName) 
    { 
     OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 
+0

Si c'est UWP, vous pouvez également utiliser « x: Bind » au lieu de liaison qui est fortement typé, a Intellisense et est dit avoir de meilleures performances. –