2010-11-16 32 views
0

J'ai simplement copié et collé un storyboard dans un dictionnaire de ressources, mais cela ne fonctionne pas. Alors, comment puis-je déplacer avec succès une animation de storyboard dans un dictionnaire de ressources afin que le fichier xaml principal soit aussi propre et lisible que possible?Comment déplacer un storyboard Silverlight dans un ResourceDictionary?

Voici un exemple de code que je veux entrer dans animationResource.xaml

<!-- the story board controlling the grid animation --> 
<Storyboard x:Name="MoveBall"> 
     <DoubleAnimation Duration="0:0:1" To="200" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="grid" d:IsOptimized="True"> 
      <DoubleAnimation.EasingFunction> 
       <BackEase EasingMode="EaseInOut"/> 
      </DoubleAnimation.EasingFunction> 
     </DoubleAnimation> 
    </Storyboard> 


<!-- I've left out all the other default xaml like the layoutRoot grid ---> 

<Grid x:Name="grid" HorizontalAlignment="Left" Margin="190,180,0,220" Width="80" RenderTransformOrigin="0.5,0.5"> 
     <Grid.RenderTransform> 
      <TransformGroup> 
       <ScaleTransform/> 
       <SkewTransform/> 
       <RotateTransform/> 
       <TranslateTransform/> 
      </TransformGroup> 
     </Grid.RenderTransform> 
     <Ellipse Fill="#FFF4F4F5" Stroke="Black"/> 
    </Grid> 

Répondre

0

Plus de détails sur exactement ce qui ne fonctionne peut-être utile, mais à première vue, vous serez probablement obtenir une erreur lorsque vous essayez de démarrer ce storyboard, car Storyboard.TargetName ne peut pas résoudre (puisque l'élément avec ce nom n'est plus dans le même fichier).

Une solution pour cela serait de définir la cible du Storyboard (par opposition au TargetName) dans le code, peut-être dans le constructeur de l'objet contenant la grille que vous voulez animer. Cela pourrait ressembler à:

Storyboard.SetTarget(App.Current.Resources["MoveBall"] as Storyboard, grid); 

Vous aurez probablement aussi soit supprimer le d: tag IsOptomized ou assurez-vous que cet espace de noms est défini en haut de votre dictionnaire de ressources.

Il convient de mentionner que cela rend votre Xaml légèrement plus lisible au prix de rendre votre code plus complexe, ce qui pourrait ne pas être le genre de compromis que vous voulez faire.