IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Composants WPF pour effets sur textes


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut Composants WPF pour effets sur textes
    Bonjour à tous,

    Je suis un petit nouveau dans le monde WPF et suis enfin heureux de voir que Microsoft nous permet de s'affranchir de notre bon vieux GDI

    Je souhaite me faire la main sur WPF, et souhaiterai faire quelques effets/animations sur des labels simples. Je souhaiterai faire un peu comme la fenêtre de connexion de Windows Live Messenger 2011.

    Des textes arrivent de bas en haut, avec une opacité qui varie.
    Des textes arrivent aussi de gauche vers la droite.

    Ma question est de savoir si ce genres d'effets nécessitent des composants tiers, ou si c'est faisable en WPF 4.

    Je vous remercie à tous d'avance de l'attention que vous portiez à mon message.

    Bien cordialement,

    Nixeus

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Bienvenue
    Oui ce que tu souhaites faire est réalisable avec le Framework 4.0 sans composant externe.

    Je te donne un lien vers les tutoriels du site :


    Bon courage. Si tu veux des précisions sur certains points particuliers, n'hésites pas.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Merci beaucoup de ta réponse

    Ca fait plaisir !

    J'ai hâte de titiller un peu WPF !
    En espérant arriver à faire de belles IHM et avoir de belles idées

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    J'ai trouvé cet exemple de transformation de texte
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    <TextBlock FontSize="25"> 
    Texte avec un caractère animé 
    <TextBlock.TextEffects> 
       <TextEffect PositionStart="12" PositionCount="1">
         <TextBlock.Transform> 
           <RotateTransform Angle="0"
    x:Name="RotationLettreTextBlock" /> 
       </TextBlock.Transform> 
      </TextEffect> 
     </TextBlock.TextEffects> 
     
      <TextBlock.Triggers> 
       <EventTrigger RoutedEvent="TextBlock.MouseEnter"> 
         <EventTrigger.Actions> 
           <BeginStoryboard> 
              <Storyboard> 
                <DoubleAnimation
    Storyboard.TargetName="RotationLettreTextBlock "
    Storyboard.TargetProperty="Angle" From="0.0" To="360"
    Duration="0:0:3" /> 
              </Storyboard> 
        </BeginStoryboard> 
       </EventTrigger.Actions> 
      </EventTrigger> 
     </TextBlock.Triggers> 
    </TextBlock>

    Le problème est que j'ai une erreur de compilation sur la ligne <TextBlock.Transform> .

    Quand je fais TextBlock. je n'ai pas la méthode Transform.

    Sais tu d'ou cela vient ? Inclusion manquante?

    Merci d'avance,

    Cordialement,

    Nixeus

  5. #5
    Membre éprouvé Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Points : 998
    Points
    998
    Par défaut
    Hello,

    Si je me trompes pas, tu dois utiliser RenderTransform ou LayoutTransform pour que cela fonctionne. Elles ne sont pas appliquées au même moment.

    Voici un article expliquant la différence : http://patconroy.wordpress.com/2009/...nsform-in-wpf/

    Bon courage dans ta découverte de cette superbe technologie
    Jonathan ANTOINE - Découvrez mon livre: MVVM, de la découverte à la maîtrise.

    Microsoft MVP Client Application Development
    - MCPD Windows 4.0, etc.
    Mon blog : http://www.jonathanantoine.com

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ta réponse

    Je suis entrain de voir comment faire un effet simple.
    Par ailleurs, pour le design, y a t-il vraiment un plus à commencer par Expression , ou VS2010 est suffisant ?

    Autre question, je voudrais qu'une de mes fonction soit appelée une fois ma form affichée à l'écran. j'appelle donc ma fonction dans l’évènement loaded, or c'est trop tôt : Ma form est affichée à l'écran, mais en fond blanc, mes éléments la composants (grid, etc....) ne sont pas encore affichés. Dois-je utiliser un autre évènement ?

    Encore merci

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Pour ma part, j'ai appris avec Visual Studio 2008 et je ne regrette pas dans le sens où ça m'a fait jouer avec le code xaml (le designer de visual studio 2008 étant pété ). Du coup j'ai mis les mains dans cambouis et j'ai pu cerner en profondeur la technologie.

    Après utiliser un designer c'est toujours un plus (meilleur rendement, meilleure représentation, ...).
    Le designer de visual studio 2010 a été amélioré par rapport à celui de 2008 mais ne vaut toujours pas celui d'Expression Blend.
    Un point important pour toi qui veut faire des animations, Expression Blend pourrait sûrement te rendre la vie plus simple.


    Citation Envoyé par Nixeus
    Autre question, je voudrais qu'une de mes fonction soit appelée une fois ma form affichée à l'écran. j'appelle donc ma fonction dans l’évènement loaded, or c'est trop tôt : Ma form est affichée à l'écran, mais en fond blanc, mes éléments la composants (grid, etc....) ne sont pas encore affichés. Dois-je utiliser un autre évènement ?
    Tu es sûr que tes composant grid, etc ne sont pas créés à ce moment ? Je dis ça car l'évènement Loaded me semble être celui qu'il faut.
    Je pense à quelque chose, si tu mets un point d'arrêt dans l'évènement Loaded et que tu t'attends à voir quelque chose au niveau de l'interface, tu te trompes. Je crois que la fenêtre reste vide, mais tes contrôles sont bel et bien créés. Il me semble

  8. #8
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ta réponse,

    Je vais alors prendre Expression Blend pour me faire la main

    Pour mon problème de loaded, ce qu'il se passe est simple.

    Ma fenêtre apparaît en blanc, ma fonction se lance, et à la fin de cette fonction, le contenu de ma fenêtre apparaît.

    Je voudrais que ma fonction s’exécute une fois ma fenêtre complètement chargée et affichée.

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Et bien pour moi l'évènement Loaded répond à ta problématique .

  10. #10
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Et pourtant cela ne fonctionne pas

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Tu peux montrer ce que fait ta fonction car il y a surement quelque chose qui m'échappe. Cette fonction fait quoi ?

  12. #12
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private void Window_Loaded(object sender, EventArgs e)
            {
                CDailyReport DailyReport = new CDailyReport(m_strUser, m_strPass);
                if (DailyReport.Login() == true)
                {
                    SaisieRapport FormSaisieRapport = new SaisieRapport();
                    FormSaisieRapport.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Echec d'authentification : utilisateur inconnu.", "Erreur d'authentification", MessageBoxButton.OK, MessageBoxImage.Hand);
                }
            }
    En fait, je veux qu'une fois ma form chargée, un objet CDailiReport soit instancié, et qu'il se connecte à mon serviceweb etc... Si l'authentificatin vérifiée par le serviceweb est ok, j'ouvre une nouvelle form.

  13. #13
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Autant pour moi, j'avais pas cerné la problématique. Je viens de faire le test avec un MessageBox et j'ai observé ce que tu voulais dire.

    Du coup pour ne pas avoir une fenêtre qui reste blanche, tu peux utiliser un Dispatcher :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
          Application app = System.Windows.Application.Current;
          if (app != null)
            app.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Background,
                                       (Action)delegate {
     
                CDailyReport DailyReport = new CDailyReport(m_strUser, m_strPass);
                if (DailyReport.Login() == true)
                {
                    SaisieRapport FormSaisieRapport = new SaisieRapport();
                    FormSaisieRapport.ShowDialog();
                }
                else
                {
                    MessageBox.Show("Echec d'authentification : utilisateur inconnu.", "Erreur d'authentification", MessageBoxButton.OK, MessageBoxImage.Hand);
                }
     
            });

  14. #14
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Aaa cela fonctionne déja bien mieux ! Merci

    Petite subtilité cependant, la Form de connection possède un texte animé, et l'animation ne se joue qu'après le traitement terminé. ( mais cette fois si, ma Form est bien affichée). Une idée ?

  15. #15
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Lorsque tu effectues un traitement long et que ce traitement est dans le même thread que celui de l'interface graphique, ton interface va en effet être 'gelée'. Pour éviter cet effet, il faut effectuer ton traitement dans un autre thread.

    L'utilisation de BackgroundWorker peut être une option intéressante :

  16. #16
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Points : 47
    Points
    47
    Par défaut
    Bonjour et merci de ta réponse,

    Je vais donc aller lire tes liens.
    Ce BackgroundWorker se chargerai donc à la fin de mon processus de validation d'ouvrire une nouvelle Form. Cela ne posera pas de problème d'ouvrir une nouvelle Form dans thread ?

Discussions similaires

  1. Cherche composants interface pour plusieurs champs texte
    Par jean_kevin_musclor dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 13/11/2013, 11h39
  2. Réponses: 1
    Dernier message: 15/08/2012, 14h56
  3. Afficher / Cacher Div + Effet sur Texte
    Par HiRoN dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/03/2009, 21h26
  4. Réponses: 10
    Dernier message: 22/11/2006, 14h17
  5. Réponses: 7
    Dernier message: 13/12/2003, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo