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 :

Défilement de texte dans un TextBlock


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut Défilement de texte dans un TextBlock
    Bonjour,

    je cherche une solution pour faire défiler du texte dans un TextBlock si le texte en question est trop grand pour tenir dans le TextBlock.

    Je cherche à faire ça seulement en Xaml sans code-behind.

    J'ai déja parcouru et essayé beaucoup d'exemples de "marquee", mais je n'arrive vraiment pas à l'effet que j'ai cité plus haut.

    Je m'en remet donc à vous pour un peu d'aide.

    Merci beaucoup.

  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,

    Citation Envoyé par distil
    J'ai déja parcouru et essayé beaucoup d'exemples de "marquee"
    marquee = "markup extension" ?


    Sinon est-ce que mettre le texte dans le tooltip du TextBlock conviendrait ? Ou alors utilise un TextBox en mettant BorderThickness à 0, Background à Transparent, et IsReadOnly à True pour avoir un style type TextBlock et pouvoir quand même sélectionné le texte et le faire défiler

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    je doute que tu arrives à faire ca sans code behind...

    Regarde ici: http://blogs.msdn.com/delay/

    L'auteur du blog en a fait un pour Silverlight (mais le principe est le même) il y a quelque temps déjà

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    je l'ait fait mais en fait je faisais defiler un textbox dans un canvas par exemple avec une animation qui rebouclait sur la taille du textbox

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par binoo Voir le message
    Salut,


    marquee = "markup extension" ?


    Sinon est-ce que mettre le texte dans le tooltip du TextBlock conviendrait ? Ou alors utilise un TextBox en mettant BorderThickness à 0, Background à Transparent, et IsReadOnly à True pour avoir un style type TextBlock et pouvoir quand même sélectionné le texte et le faire défiler

    marquee => en référence à la balise <marquee> du html

    Sinon, ta 2eme solution, quand tu dis "le faire défiler" : c'est en utilisant la souris, mais ce sera pas automatique ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Une solution qui aurait pu etre pas mal est d'utiliser un RenderTransform en X sur le TextBlock avec une animation qui le fait tourner en boucle: le problème est que le défilement du TextBlock fait bel et bien défiler le TextBlock correctement, mais la partie du texte tronquée n'est pas plus montrée qu'avant; en fait c'est seulement la partie visible du texte qui défile...

    Quelqu'un aurait une idée pour aller plus loin à partir de cette solution ?

  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
    Citation Envoyé par distil
    Sinon, ta 2eme solution, quand tu dis "le faire défiler" : c'est en utilisant la souris, mais ce sera pas automatique ?
    Oui, j'ai mal compris la problématique

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    je doute que tu arrives à faire ca sans code behind...

    Regarde ici: http://blogs.msdn.com/delay/

    L'auteur du blog en a fait un pour Silverlight (mais le principe est le même) il y a quelque temps déjà
    J'ai réussi à obtenir ce que je voulais à partir de cet exemple, mais je voudrais maintenant l'utiliser dans un UserControl pour pouvoir l'appliquer facilement à tous les textes de mon application.

    voici le UserControl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <UserControl  x:Class="CustomControlLibrary.MarqueeText"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     
        >
        <ScrollViewer  x:Name="Marquee" 
                          VerticalAlignment="Center"
                          HorizontalScrollBarVisibility="Hidden"
                          VerticalScrollBarVisibility="Hidden"
                         >       
            <ContentPresenter/>
        </ScrollViewer>
    </UserControl>
    Et le code- behind :
    Code : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public partial class MarqueeText : UserControl
        {
            // Timer and direction variables
            private DispatcherTimer _timer;
            private int _delta = 1;
     
            public MarqueeText()
            {
                InitializeComponent();           
     
               // Create timer to tick every 10ms
               _timer = new DispatcherTimer
               {
                   Interval = TimeSpan.FromMilliseconds(50)
               };
     
               // Attach a Tick handler to do the scrolling
               _timer.Tick += delegate
               {
     
                   // Flip direction if necessary
                   if ((0 < Marquee.ViewportWidth) &&  // (NOOP if not visible yet)
                       ((Marquee.ScrollableWidth <= Marquee.HorizontalOffset) ||
                        (Marquee.HorizontalOffset <= 0)))
                   {
                       _delta = -_delta;
                   }
     
     
                   // Adjust the horizontal offset
                   Marquee.ScrollToHorizontalOffset(Marquee.HorizontalOffset + _delta);
     
               };
     
               // Start the timer
               _timer.Start();
            }
     
        }
    Mais le problème est le suivant:
    Lorsque je place du texte directement à l'intérieur du UserControl, le texte est correctement "scrollé", mais lorsque je place du texte dans l'appel de mon UserControl (à un autre endroit), le texte dans ce cas n'est pas scrollé...

    Y'aurait- il un moyen de résoudre cela ?

    Merci.

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par distil Voir le message
    lorsque je place du texte dans l'appel de mon UserControl (à un autre endroit), le texte dans ce cas n'est pas scrollé...
    Pas compris.....

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    désolé, je m'exprime mal ...

    quand j'utilise mon userControl ça donne quelquechose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <MyCtrl:MarqueeText Grid.Row="1" Grid.Column="1"    >
     
    </MyCtrl:MarqueeText>
    si je place directement du texte dans ce userControl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <MyCtrl:MarqueeText Grid.Row="1" Grid.Column="1"    >
     
    Texte qui devra être scrollé automatiquement  
     
    </MyCtrl:MarqueeText>
    Le texte ne bouge pas.

    J'espère être un peu plus clair.

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Normall: il faut qeu tu places le texte dans le scrollview qui est dnas l'UC, pas directement dans l'UC

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    Normall: il faut qeu tu places le texte dans le scrollview qui est dnas l'UC, pas directement dans l'UC
    Oui, mais mon but est de faire un contrôle générique qui puisse être réutilisé avec des textes différents... , apparemment je ne peux donc pas arriver à ça avec un User Control , juste ?

  13. #13
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Si mais il faut que tu déclares une propriété, sur ton UC, qui va aller modifier la valeur du texte qui est dans ton ScrollView. Et pour l'utiliser, tu feras:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MyCtrl:MarqueeText Grid.Row="1" Grid.Column="1" Text="Mon Textre"   >

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Ok, donc:

    Dans le code behin de mon UC, je déclare :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public partial class MarqueeText : UserControl
        {
     
            public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(String), typeof(MarqueeText));
     
            public String myText
            {
                get { return (String)GetValue(TextProperty); }
                set { SetValue(TextProperty, value); }
            }
     ...

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Oups, mauvaise manip..., je continue,

    dans le xaml du Uc :

    Code : 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
     
     
    <UserControl  x:Class="CustomControlLibrary.MarqueeText"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  x:Name="uc"
       >
     
        <ScrollViewer  x:Name="Marquee" 
                          VerticalAlignment="Center"
                          HorizontalScrollBarVisibility="Hidden"
                          VerticalScrollBarVisibility="Hidden"   
                         >
     
            <TextBlock Text="{Binding Path=myText,ElementName=uc}"/>   
     
        </ScrollViewer> 
    </UserControl>
    et dans l'utilisation de mon UC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <MyCtrl:MarqueeText  Grid.Row="1" Grid.Column="1" myText=" Texte a faire bouger"/>

    ... Ou est l'erreur ?, je n'y arrive pas à voir le texte ...

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    Mais en plus, dans ce cas, je ne peux pas utiliser une "DynamicResource" pour afficher mon texte

    Property 'myText' does not support values of type 'DynamicResourceExtension'.
    Est ce que je peux adapter ma propriété pour supporter cela ?

  17. #17
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu t'es trompé dans ta DP.....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("myText", typeof(String), typeof(MarqueeText));
     
            public String myText
            {
                get { return (String)GetValue(TextProperty); }
                set { SetValue(TextProperty, value); }
            }

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    oui juste...

    par contre par rapport à ma remarque précédente, si dans le code behind, je remplace le type "String" par "DynamicResourceExtension", je pensais pouvoir utiliser une resource dynamique à l'appel de mon UC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <MyCtrl:MarqueeText  Grid.Row="1" Grid.Column="1" myText="{DynamicResource myDynResource}" />
    Mais j'obtiens l'erreur suivante :

    'myDynResource:' is not a valid value for property 'CustomControlLibrary.MarqueeText-64395447-myText'.
    J'ai encore fait une erreur, ou ce n'est pas possible d'utiliser une dynamicResource comme ça ?

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 87
    Points : 34
    Points
    34
    Par défaut
    J'ai rien dit c'est tout bon !!

    Merci beaucoup !

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    en fait je suis tombe par hazard la dessus
    http://www.codeproject.com/Articles/...ce-In-WPF.aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Permettre la selection du texte dans un TextBlock?
    Par takinelinfo dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 27/09/2011, 23h35
  2. Détecter le changement du texte dans un TextBlock
    Par cyberbobby dans le forum Silverlight
    Réponses: 8
    Dernier message: 12/05/2010, 15h17
  3. WPF fixer la largeur d un texte dans une Textblock
    Par ZashOne dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/01/2008, 12h23
  4. Défilement de text dans un tableau
    Par Interface dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/11/2007, 19h56
  5. Défilement de texte dans Powerpoint
    Par white-angel dans le forum Powerpoint
    Réponses: 5
    Dernier message: 24/10/2007, 21h13

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