Je dois utiliser le même storyboard à plusieurs endroits donc j'ai placé le scénario à l'intérieur de ma candidature.Resources. Lorsque j'essaie d'exécuter le scénario, le seul problème est que je dois faire référence à la cible que je veux animer. Voici mon storyboard:
DoubleAnimation animation = new DoubleAnimation(); animation.To = 336; // final value //animation.From = 0; //animation.BeginTime = TimeSpan.FromSeconds(0); animation.Duration = new Duration(TimeSpan.FromSeconds(5)); // how much time should animation last // here comes the magic: // note that I can bind to EasingDoubleKeyFrame in my resource file in xaml animation.EasingFunction = ((EasingDoubleKeyFrame)FindResource("pleaseWork")).EasingFunction; // apply the easing function Storyboard.SetTarget(animation, groupBox1); // what object will be animated? Storyboard.SetTargetProperty(animation, new PropertyPath(FrameworkElement.HeightProperty)); // what property will be animated Storyboard sb = new Storyboard(); sb.Children.Add(animation); sb.Begin();
3 Réponses :
Vous n'avez pas besoin de faire référence à la cible nulle part, vous pouvez simplement en créer un local, il s'agit de l'une des fonctionnalités importantes de la recherche dynamique des ressources, par exemple
<!-- Somewhere else... --> <Button Name="mybutton" Content="Test" Height="20"> <Button.Resources> <sys:String x:Key="AnimationTarget">mybutton</sys:String> </Button.Resources> <Button.Triggers> <EventTrigger RoutedEvent="Button.Click"> <BeginStoryboard Storyboard="{StaticResource SB_Height}"/> </EventTrigger> </Button.Triggers> </Button>
Si avec ce bouton, je veux animer quelque chose d'autre, je changerai l'animation de la ressource à cordes à quelque chose d'autre? Pourquoi est-ce que quand je change ça à autre chose, cela ne fonctionne pas? Cela fonctionne lorsque j'élever ce bouton.
Je viens de créer la ressource:
Merci beaucoup pour l'aide. Lorsque je veux exécuter le même scénario sur différents objets simultanément, cela ne fonctionne pas. J'ai besoin d'exécuter les storyboards du code.
DynamicResource n'existe pas dans UWP. Est-ce qu'il existe une solution similaire comme celle-ci?
@Briefkasten: Je ne sais pas. Si vous souhaitez animer l'élément qui fait référence au storyboard, vous devriez pouvoir simplement déposer le storyboard .TargetName code> entièrement. Je n'ai pas d'outils UWP installé et je ne peux penser à rien qui fonctionnerait ...
Enfin j'ai trouvé la solution !!!!!
Si vous rappelez l'erreur que j'ai eu lors de la mise en place du storyboard dans le fichier app.xaml était la suivante: p>
Impossible de définir une propriété sur l'objet 'System.windows.media.animation.doublbleLimationDUningKeyFames' parce qu'il est Dans un état en lecture seule. P>
En d'autres termes, je ne pouvais pas modifier la propriété cible du storyboard que je pouvais simplement le rouge. La solution consistait donc à modifier le laisse moi Mettez tout ensemble: p> - p> - p> // remplace le storyboard.targetname = "grille" pour storyboard.targetname = "{Binding}".
// votre ressource de scénario ne devrait pas ressembler à: p> - p> - p> scénographier.targetname = "grille" code> pour
storyboard.targetname = "{binding}" code> p>
<Border Name="brdBorder" BorderBrush="Silver" BorderThickness="1" Margin="338,6,0,0" Background="#FFE52E2E" HorizontalAlignment="Left" Width="94" Height="38" VerticalAlignment="Top">
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Border.RenderTransform>
</Border>
// AND
<Button Name="mybutton" Content="Test" Height="20" Click="mybutton_Click">
<Button.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</Button.RenderTransform>
</Button>
AS:
runStoryboard("Storyboard1", brdBorder.Name);
runStoryboard("Storyboard1", mybutton.Name);
Vous auriez juste pu écouter mes conseils et définir x: partagé code> sur false et vous ne seriez pas dans aucun b> de ce désordre.
Mais j'avais besoin d'appeler le scénario à partir du code et lorsque j'utilise votre code, cela fonctionnait, mais pas sur plusieurs objets animés à la fois.
Vous devez définir x: partagé code>
à faux code>, Ça fonctionne, je l'ai essayé b>, si vous avez toujours des problèmes, il vous suffit de l'obtenir deux fois en utilisant
Findresource code>, de cette façon que vous obtenez Deux scénario ...
Lorsque X: partagé code> est
false code> Vous pouvez définir les propriétés du code qui auparavant ont été réadis, jetant une exception ...
Ouais tu as raison désolé. Je vais vous donner les points :). Merci pour l'aide. Une solution ma solution peut être longue parce que j'ai tout expliqué. La seule chose que vous devez avoir est la méthode que j'ai montrée dans ma solution et coller toute scénario remplaçant la propriété cible avec une ressource contraignante. Je pense que j'ai expliqué beaucoup. Merci encore
Je ne pouvais pas utiliser "ce" mot-clé dans Storyboard.begin () et Findresource n'est pas disponible. De l'aide?
pour un
J'ai fait face au même problème et j'ajoute de mélanger de nombreuses solutions pour y accomplir. P>
Ceci est mon application dans ma page, j'ai quelque chose comme ça ( page.xaml strong>) p> Maintenant, vous liez cette méthode à un événement (touche TAP ou quelque chose d'autre) p> private void MenuPanel_OnTap(object sender, GestureEventArgs e)
{
Storyboard sb = App.Current.Resources["ShowMenuAnimationKey"] as Storyboard;
sb.Stop();
Storyboard.SetTarget(sb, ViewPanel);
sb.Begin();
}
Je pense que c'est parce que Border2 n'existe pas dans une portée globale qu'il n'existe que dans MainWindow. Mais j'ai essayé de remplacer border2 pour MAINWINDOW.BORDER2 et cela ne fonctionne toujours pas