2015-08-14 1 views
0

Je dois créer un contrôle de pourcentage de chargeur. J'ai créé un contrôle de deux Arc. Un arc est pour le fond et un pour le premier plan. Je vais donner l'angle final comme une entrée à l'Arc. J'ai écrit une classe d'animation double pour effectuer l'animation de chargement. Quand j'ai essayé d'invoquer le story-board dans le code derrière, l'animation fonctionne.PropertyChangedTrigger dans WP8 ne fonctionne pas

Mais mon exigence est, chaque fois qu'une propriété change, j'ai besoin de charger le chargeur. J'ai donc décidé d'utiliser PropertyChangedBehaviour. Mais l'animation ne fonctionne pas. S'il vous plaît suggérer la meilleure façon de le faire

Voici le code XAML:

<VisualStateManager.VisualStateGroups> 
     <VisualStateGroup x:Name="ValueStates"> 
      <VisualState x:Name="On"> 
       <Storyboard x:Name="storyBoard2"> 
        <DoubleAnimation Duration="0:0:9" To="270" Storyboard.TargetProperty="(Arc.EndAngle)" Storyboard.TargetName="TimerProgressBar"> 
         <DoubleAnimation.EasingFunction> 
          <ExponentialEase EasingMode="EaseOut"/> 
         </DoubleAnimation.EasingFunction> 
        </DoubleAnimation> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
      <Grid Grid.Row="1" 
        Background="Transparent" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Top" 
        Margin="0 40 0 0"> 
       <i:Interaction.Triggers> 
        <ec:PropertyChangedTrigger Binding="{Binding EndAngleValue}"> 
         <ec:GoToStateAction StateName="On"/> 
        </ec:PropertyChangedTrigger> 
       </i:Interaction.Triggers> 
       <es:Arc ArcThickness="1" 
         Fill="{StaticResource OlaTextLightGrayBrush}" 
         ArcThicknessUnit="Pixel" 
         Stretch="None" 
         Stroke="{StaticResource OlaTextLightGrayBrush}" 
         StartAngle="0" 
         EndAngle="360" 
         UseLayoutRounding="False" 
         Width="297" 
         Height="297" /> 

       <es:Arc ArcThickness="4" 
         Fill="{StaticResource OlaGreenBrush}" 
         x:Name="TimerProgressBar" 
         ArcThicknessUnit="Pixel" 
         Stretch="None" 
         StartAngle="0" 
         UseLayoutRounding="False" 
         Width="300" 
         Height="300" VerticalAlignment="Bottom" d:LayoutOverrides="Height" > 

        <es:Arc.Stroke> 
         <SolidColorBrush 
          Color="{StaticResource OlaGreen}"/> 
        </es:Arc.Stroke> 
       </es:Arc> 

Mon Voir Modèle:

public double EndAngleValue 
    { 
     get 
     { 
      return _EndAngleValue; 
     } 

     set 
     { 
      SetProperty(ref _EndAngleValue, value); 
     } 
    } 

Chaque fois que la propriété 'changements' EndAngleValue, je dois effectuer l'animation.

Toute suggestion est appréciée

+0

Avez-vous mis en œuvre 'INotifyPropertyChanged' dans le modèle de vue? –

+0

Votre 'VisualStateManager' est-il défini à la racine du contrôle? – thumbmunkeys

+0

Oui Le gestionnaire d'état visuel est défini à la racine. –

Répondre

0

Si vous avez mis en place, alors vous devriez être en mesure de le faire:

public double EndAngleValue 
{ 
    get 
    { 
     return _EndAngleValue; 
    } 

    set 
    { 
     SetProperty(ref _EndAngleValue, value); 
     OnPropertyChanged("EndAngleValue"); 
    } 
} 

private OnPropertyChanged(string propertyName) 
{ 
    if(PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

SetProperty() a déjà implémenté OnPropertyChanged(). –