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éclenchement d'un tooltip


Sujet :

Windows Presentation Foundation

  1. #1
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut Déclenchement d'un tooltip
    Salut à tous

    Je suis dans un contexte WPF avec couche MVVM, 2 technos que je découvre et que je ne maîtrise pas trop.

    J'ai une checkbox sur mon écran (usercontrol) ainsi qu'un textbox.

    Lorsque la checkbox est décochée, la textbox est cachée. Lors du cochage de la checkbox, la textbox s'affiche. Ca, j'ai réussi à faire, ça marche.

    Ma textbox à un tooltip.
    Je souhaiterais que, lorsque la textbox s'affiche (ou, donc, lorsqu'on coche la checkbox), le tooltip de la textbox s'affiche automatiquement.

    J’imagine qu'il faut passer par un système de binding sur une commande ou un event, mais c'est sur ce point que je suis largué.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    MVVM faut pas forcement le prendre au pied de la lettre.
    Parfois il n'y aucune utilité à tout vouloir mettre dans le VM et je crois qu'ici c'est le cas, je vois pas dans quelle mesure tu as un interet a piloter depuis ta VM une information qui se trouve dans un tooltip.
    Si demain tu modifies ta vue pour utiliser un watermark plutot qu'un tooltip, tu vas devoir changer ta VM, hors c'est exactement ce a quoi sert MVVM, découper les reponsabilités, et la frontiere est franchement fine en ce qui concerne MVVM (tu as le meme probleme de frontiere entre VM et M ).

    Bref moi je ferais directement ca dans le code behind de ta vue, sur l'evenement de de changement de visibilité de ton textbox.
    Utilises aussi un popup au lieux de ToolTip j'ai eu un comportement un peu chaotiques avec le toolip.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <TextBox Visibility="{Binding IsChecked,ElementName=checkBox,Converter={StaticResource boolToVisibleConverter}}" x:Name="txtHello" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Text="Hello" IsVisibleChanged="txtHello_IsVisibleChanged" Margin="19,83,0,0"  ></TextBox>
            <Popup x:Name="ToolTipTextBox" PlacementTarget="{Binding ElementName=txtHello}" Placement="Top">
                <StackPanel>
                    <TextBlock Text="Blablabla.."/> 
                </StackPanel>
            </Popup>
    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 txtHello_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
            {
                if (txtHello.Visibility == Visibility.Visible)
                {
                    ToolTipTextBox.IsOpen = true;
                    //Enleve ca si tu veux pas que ca disparraise avec un clic
                    ToolTipTextBox.StaysOpen = false;
                }
                else
                {
     
                    ToolTipTextBox.IsOpen = false;
                }
            }

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Loin de moi l'idée de vouloir tout mettre dans le VM. A vrai dire, j'espérais même que ce soit possible rien qu'en restant dans le xaml.

    Je découvre le MVVM, et on peut dire que j'en suis aussi encore à la découverte de WPF. Çà me semble extrêmement puissant et très intéressant, mais effectivement, quelle prise de tête.

    Et je suis d'accord avec toi sur le fait de ne pas tout mettre dans le VM. Et je pense même que pour ce soft, qui n'est qu'un utilitaire interne, on aurait pu se passer du MVVM et rester uniquement sur la couche WPF.
    Seulement voilà, le dev qui a développé ça, qui n'est plus dans la boite maintenant, devait maitriser depuis peu de temps la techno et en a profiter pour se faire plaisir.
    Jusqu'à redévelopper en MVVM une boite de dialogue pour sélectionner un fichier ou un dossier, bien entendu sans toutes les possibilités de celles de Windows, au grand dam des utilisateurs. Mais bon, ça, ça a été corrigé.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 025
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 025
    Points : 5 462
    Points
    5 462
    Par défaut
    C'est possible en pur xaml egalement.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            <TextBox Visibility="{Binding IsChecked,ElementName=checkBox,Converter={StaticResource boolToVisibleConverter}}" x:Name="txtHello" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Text="Hello" Margin="19,83,0,0"  ></TextBox>
            <Popup x:Name="ToolTipTextBox" PlacementTarget="{Binding ElementName=txtHello}" Placement="Top" StaysOpen="False" IsOpen="{Binding Visibility,Mode=OneWay,ElementName=txtHello,Converter={StaticResource visibilityToBool}}" >
                <StackPanel>
                    <Label Content="Blablabla.." Background="Red"/>
                </StackPanel>
            </Popup> 
            <CheckBox x:Name="checkBox" Content="CheckBox" HorizontalAlignment="Left" Margin="278,82,0,0" VerticalAlignment="Top"/>
    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
        class VisibilityToBool : IValueConverter
        {
            #region Constructors
            /// <summary>
            /// The default constructor
            /// </summary>
            public VisibilityToBool() { }
            #endregion
     
            #region IValueConverter Members
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                Visibility visibility = (Visibility)value;
                if (visibility == Visibility.Visible)
                    return true;
                else
                    return false;
            }
     
     
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                bool vbool = (bool)value;
     
                if (vbool)
                    return Visibility.Visible;
                else
                    return Visibility.Hidden;
            }
            #endregion
        }
    J'ai rajouté le binding de la propriété IsOpen en mode OneWay directement sur la visibilité du textbox, qui lui meme est bindé sur le checkbox .

    [I][SIZE=1][COLOR="#A9A9A9"]Jusqu'à redévelopper en MVVM une boite de dialogue pour sélectionner un fichier ou un dossier, bien entendu sans toutes les possibilités de celles de Windows, au grand dam des utilisateurs. Mais bon, ça, ça a été corrigé.
    Effectivement ca peut vite devenir une horreur MVVM, normalement toute tes VM parlent par messagerie, que de joie .
    Et en effet WPF est ultra mega puissant...mais parfois ultra mega compliqué pour des trucs tout con...

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    ok, merci. je regarderais tout ça au boulot, lundi. Je m'en inspirerais pour mon tooltip, et si je n'y arrive pas, je passerais sur un popup.
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

Discussions similaires

  1. Bouton d'activation/désactivation de tooltips
    Par bigboomshakala dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2004, 08h54
  2. [VB.NET] Tooltips dans un DataGrid
    Par seemax dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/04/2004, 14h16
  3. Déclenchement sur select
    Par sdinot dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 02/04/2004, 11h52
  4. 1er déclenchement d'un trigger d'auto-incrément
    Par babylone7 dans le forum Administration
    Réponses: 11
    Dernier message: 11/03/2004, 16h21
  5. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58

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