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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    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
    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
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    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 056
    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 du Club
    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
    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
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    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 056
    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 du Club
    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
    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
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    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 056
    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;
                        }
                    }
                }
            }

+ 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, 17h23
  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, 16h23
  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, 16h27
  4. [Débutant][Netbeans 4.1]Groupe de boutons RADIO
    Par Terminator dans le forum NetBeans
    Réponses: 1
    Dernier message: 12/09/2005, 16h22
  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, 14h42

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