7
votes

WPF - ça doit être plus facile que je ne le fais pas

Je suis darndest chronométrant cela: disons que j'ai deux boutons et trois textes de texte. Je souhaite que l'une quelconque des boutons déclenche un storyboard simple sur tous les blocs de texte. Actuellement, j'essaie de définir un style de texte générique contenant le storyboard, puis le déclencheur provient de n'importe quel bouton clic. C'est le plus proche que je ne suis arrivé mais l'application se bloque sur le démarrage ... Qu'est-ce que je ne me trompe pas ici: xxx

xxx / p>


3 commentaires

Pourriez-vous essayer de donner à la scénario un nom, puis de voir si dans le code-derrière-derrière, vous pouvez commencer correctement ()?


Demandez-vous la même question ici: Stackoverflow.com/Questtions/1238817/wpf-Animation -Question ou recherchez-vous un bouton 2 boutons clic sur les déclencheurs?


Je pense que quelqu'un avec le représentant doit combiner cette question avec celui que j'ai référencé dans le commentaire ci-dessus.


3 Réponses :


6
votes

Si vous "dédiez" le bouton pour changer l'opacité, vous pouvez exploiter son dataContext et l'animer. Alors simplement lier vos éléments ' opacité au dataContext :

(J'ai également refactore votre xaml un peu) xxx

Notez également une chose - il s'agit de l'approche à utiliser si vous souhaitez minimiser votre code, et faire tout cela se produisait dans XAML. Votre approche apparaîtrait à l'opacité de la fenêtre entière. C'est pourquoi, dans le code ci-dessus, TextBlocks se lie au bouton DataContext , qui est lui-même animé.

Il est bien sûr faisable sans lier à une valeur commune (le DataContext), mais Ensuite, vous devez répéter x animations (car vous devez définir x noms cible). Cette approche ci-dessus est plus facilement extensible et maintenable.

edit

Ajout d'un autre bouton et d'une liste de liste pour la variété :)


0 commentaires

0
votes

Dans votre échantillon, vous définissez le storyboard à l'intérieur d'un style en tant que ressource, mais vous essayez ensuite d'y accéder comme ressource de fenêtre. Essayez de déplacer la déclaration de scénario à la fenêtre.Resources, puis référencez le storyboard dans le style.

Je ne sais pas tout de suite si cela fera ce que tu veux, mais je commencerais là.


1 commentaires

D'accord, j'ai couru autour de cela pour toujours, mais ce qu'il se résume à Nomscope. J'ai une liste de liste que je souhaite déclencher l'animation sur les textes de texte, mais ils ne sont pas dans les mêmes nomscope, donc si je pose le storyboard dans les fenêtres.Resources, la gâchette de labox peut trouver le storyboard, mais le storyboard ne peut pas trouver le TargetName des text-allées. Si je mettais le storyboard dans Grid.Resource (où les textblocks sont), la gâchette de changement de liste de liste ne peut pas trouver le storyboard. Existe-t-il une convention de dénomination que je peux utiliser pour traverser des noms de noms? Pouah! Merci!



4
votes

basé sur la solution XAML uniquement de Kek444, je présente une version légèrement améliorée qui ne s'appuie pas sur le DataContext du bouton et peut avoir plusieurs déclencheurs.

<EventTrigger RoutedEvent="ListBoxItem.Selected" SourceName="item1">
    <BeginStoryboard Storyboard="{StaticResource OnClick1}"/>
</EventTrigger>


6 commentaires

C'est assez gentil! Je voulais éviter de créer des uelements comme des ressources, mais les gens devraient aller avec ce qui leur convient mieux. Cependant, appeler cette approche s'est améliorée sur la base du fait qu'il n'utilise pas DataContext et prend en charge plusieurs déclencheurs serait quelque peu injuste. L'utilisation d'une ressource uielement sur DataContext n'est qu'une question de préférence personnelle; Et les deux solutions prennent en charge plusieurs déclencheurs. Sinon, bon travail. ;)


Ok ... maintenant pour le rendre légèrement plus compliqué ... Je n'essaie pas vraiment de déclencher un bouton, mais hors d'un changement de liste de ListboxItem à partir d'une liste de liste située à l'intérieur d'une bordure, à l'intérieur d'une grille la fenêtre principale. J'ai essayé cela pendant des heures mais je ne peux pas obtenir le bon roudevent ... Tous les événements ListboxItem donnent une erreur sur la classe étant scellée ou quelque chose de ...


Je l'ai seulement appelé que cela s'est amélioré car il ne nécessite pas de datacontext séparé pour chaque mécanisme de déclenchement (c'est-à-dire les boutons). Je ne voulais pas offenser.


C'est bon, aucune offense prise, je voulais juste le signaler. Vous devriez noter que plusieurs datacontextes ne sont pas nécessaires. J'ai étendu un peu l'exemple pour la complétude.


@uknown (Google): L'erreur apparaît car l'assemblage n'est pas conçu pour un nouvel accès des ressources. Cela devrait fonctionner après une construction.


Ok, cela va enfin venir ensemble ... J'avais une erreur à propos de l'événement étant scellé lors de la tentative de déclenchement de la liste de liste ... Ce n'est pas parce que j'utilisais cet événement dans la déclaration de la liste de liste ... je me suis débarrassé de cet appel pour l'instant ... merci tout !!!