1

Étant donné un Storyboard lancé par VisualStateManager dans le cadre d'un ControlTemplate, comment ajusterais-je le SpeedRatio de cette animation en fonction des changements de propriétés du contrôle?Comment contrôler le SpeedRatio d'un Storyboard dans un VisualState?

<ControlTemplate> 
    <Grid> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
     <VisualState> 
      <Storyboard Name="SpinningThing" 
         SpeedRatio="{Binding SpinningSpeedRatio}"> 
      ... 

Cela doit fonctionner à la fois dans WPF et Silverlight.

Je ne pense pas que je peux définir une liaison là pour un certain nombre de raisons. Tout d'abord, Storyboard est Freezable de sorte que vous ne pouvez pas simplement définir le SpeedRatio tout bon gré mal gré dans WPF. Mais, s'il est démarré par VisualStateManager, puis-je appeler SetSpeedRatio dessus? En outre, puisque son parent est un VisualState, cela ne signifie-t-il pas qu'il n'y aurait pas de FrameworkElement régissant à cet égard? Donc, si je ne peux pas le faire avec une reliure, comment cela peut-il être fait?

Répondre

0

D'accord, il semble donc qu'il n'y a vraiment aucun moyen de gérer cela strictement avec une liaison. Donc, pour en tenir compte, j'ai accroché des événements dans le code-behind pour démarrer/ajuster les animations selon les besoins.

0

Normalement, vous utiliseriez un {TemplateBinding ...} plutôt qu'un {Binding ...}, mais cela ne fonctionne que pour des types simples et compatibles.

Vous devriez également pouvoir vous lier au contrôle basé sur un modèle en utilisant un "relative binding source". Cela vous permet également d'utiliser un convertisseur de valeur si les types ne correspondent pas. Je n'ai pas testé cela dans WPF, mais Silverlight est normalement celui à fonctionnalités restreintes.

+1

Malheureusement, WPF est l'endroit où la réponse simple s'effondre. Dans WPF, les timelines sont des objets Freezable, donc une liaison ne changera pas la valeur réelle du SpeedRatio. http://msdn.microsoft.com/fr-fr/library/system.windows.media.animation.timeline.aspx En outre, parce qu'il est dans un ViewState (je suppose), vous obtenez l'erreur de liaison en disant "Impossible de trouver le FrameworkElement régissant la liaison ...". – MojoFilter

Questions connexes