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 :

Style initial d'un groupe de boutons radio [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 11
    Points
    11
    Par défaut Style initial d'un groupe de boutons radio
    Bonjour à tous,

    je souhaiterais donner un style initial à tout un groupe de boutons radio, avant même que l'un d'entre-eux ne soit coché.

    Je vous donne un exemple pour être plus précis :
    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
     
    <Style x:Key="RadioButtonStyle" TargetType="{x:Type RadioButton}">
        <Setter Property="Foreground" Value="Blue"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RadioButton}">
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="true">
                            <Setter Property="Foreground" Value="Green"/>
                        </Trigger>
                        <Trigger Property="IsChecked" Value="false">
                            <Setter Property="Foreground" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    Dans cet exemple, je voudrais que tout le groupe de bouton radio soit bleu au démarrage, puis, en fonction du clic de l'utilisateur, que le bouton coché devienne vert, et que les autres deviennent rouge.

    Le problème est que ce code ne marche pas, tous les bouton étant rouges au démarrage car "unchecked".

    Si quelqu'un a une idée en pur xaml, merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 032
    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 032
    Points : 5 472
    Points
    5 472
    Par défaut
    Essaye de rajouter le choix null.
    Je suppose que ton radio est binder sur une valeur booleene, utilise donc une valeur bool? (nullable).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Trigger Property="IsChecked" Value="{x:null}">
                            <Setter Property="Foreground" Value="Blue"/>
                        </Trigger>

  3. #3
    Membre à l'essai
    Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Merci, c'est une super idée !

    Cependant, il reste un petit détail qui ne fonctionne pas encore tout à fait.

    Supposons que j'ai 3 boutons radio appartenant au même groupname.
    Pour ces trois boutons, j'initialise la valeur de IsChecked à {x:Null}.
    Du coup, mes 3 boutons sont bien bleu au démarrage.
    Si je coche l'un d'entre eux, il devient bien vert, et si je le décoche, il devient bien rouge. Parfait.

    Le problème c'est que les 2 autres boutons s'en contre-fichent de ce premier bouton, et gardent la valeur de IsChecked à {x:Null} tant que je ne leur clique pas dessus.
    Il faudrait juste que je puisse réattribuer la valeur "unchecked" aux deux autres boutons dès que j'en coche un, et ce serait parfait...

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 032
    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 032
    Points : 5 472
    Points
    5 472
    Par défaut
    Ah ouai c'est pas faux j'y avais pas pensé.
    Bon ben là peut etre que tu vas devoir utiliser le code behind.
    Tu nommes chacun de tes radiobuttons, tu déclares un event sur le checked.
    Et dans cet event tu fais un truc dans le genre
    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
    {
     private void radioButton_Checked(object sender, RoutedEventArgs e)
            {
                radioButton1.Checked-=radioButton_Checked;
                radioButton2.Checked -= radioButton_Checked;
                radioButton3.Checked -= radioButton_Checked;
     
                if (!radioButton1.IsChecked.HasValue)
                {
                    radioButton1.IsChecked = false;
                }
                if (!radioButton2.IsChecked.HasValue)
                {
                    radioButton2.IsChecked = false;
                }
                if (!radioButton2.IsChecked.HasValue)
                {
                    radioButton2.IsChecked = false;
                }
     
            }
    }
    Bon j'aime pas vraiment mais si personne d'autre répond

  5. #5
    Membre à l'essai
    Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    ça me plaît moins aussi, j'aimerai quelque-chose de générique, que je puisse réutiliser à différents endroits quelque-soit le nombre de boutons radios (j'en ai 3 ici, mais je pourrais très bien en avoir 30 ailleurs).

    Est-ce qu'il ne pourrait pas y avoir quelque-chose à faire avec la propriété "GroupName" pour identifier tout un groupe de bouton radio dans le code behind ? (tant-pis pour le pur xaml)

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 032
    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 032
    Points : 5 472
    Points
    5 472
    Par défaut
    Plus un truc dans ce style là alors.
    Attention ca ne marche que si t'es radioButton sont dans le même panel.
    Sinon il vaut peut etre mieux partir de la racine (layout root) et de parcourir récursivement tout les fils pour récupérer les radioButton avec le même name.

    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
           private void radioButton_Checked(object sender, RoutedEventArgs e)
            {
                RadioButton tmpRd = sender as RadioButton;
                var allRadioButn = ((Panel)tmpRd.Parent).Children.OfType<RadioButton>();
     
                foreach (RadioButton rd in allRadioButn)
                {
                    if (rd.GroupName == tmpRd.GroupName)
                    {
                        rd.Checked -= radioButton_Checked;
     
                        if (!rd.IsChecked.HasValue)
                        {
                            rd.IsChecked = false;
                        }
                    }
                }
            }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 41
    Points : 33
    Points
    33
    Par défaut
    Tu peux peut-être essayer de vérifier dans le code behind avec une requête LINQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<RadioButton> radioButtons = myGrid.Children.OfType<RadioButton>().ToList();
    RadioButton target = radioButtons
          .Where(r => r.GroupName == "TargetGroupName" && r.IsChecked == true)
          .Single();

  8. #8
    Membre à l'essai
    Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Merci micka132, c'est exactement ce qu'il me fallait !
    Pour éviter de déclarer un event sur chaque radiobutton, j'applique ce setter dans le style de mes radiobutton, ça marche du tonnerre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <EventSetter Event="Checked" Handler="radioButton_Checked" />
    sam1989 > Etant un vrai novice en C#, je ne sais pas encore ce qu'est une requête LINQ, du coup je n'ai pas réussi à tester ta proposition.

    En tout cas, encore merci les gars, vous êtes trop forts !!!

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

Discussions similaires

  1. Groupe de boutons radios
    Par owzzone dans le forum Langage
    Réponses: 1
    Dernier message: 04/04/2007, 18h23
  2. [Debutant] Fonction avec 2 groupe de Bouton Radio
    Par jazer dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/10/2006, 17h23
  3. Valeur d'un groupe de boutons radio non sélectionnés ??
    Par michaelbob dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/11/2005, 17h27
  4. [Débutant][Netbeans 4.1]Groupe de boutons RADIO
    Par Terminator dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/09/2005, 17h22
  5. [JPanel] ajouter un groupe de boutons radio
    Par ummon99 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 25/04/2005, 15h42

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