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 :

Lier des valeurs à un RadioButton group


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 32
    Points
    32
    Par défaut Lier des valeurs à un RadioButton group
    Bonjour,

    Je souhaite lier des valeurs à des radiobutton groupés dans un stackpanel, c'est à dire obtenir quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            <StackPanel Name="StackPanel1" Propiété_valeur>
    	    <RadioButton Propiété_valeur = 1>Valeur 1</RadioButton>
                <RadioButton Propiété_valeur = 5>Valeur 2</RadioButton>
                <RadioButton Propiété_valeur = 7>Valeur 3</RadioButton>
            </StackPanel>
    et ensuite en C# pouvoir utiliser quelquechose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StackPanel1.Propriété_valeur
    qui me rendrait la valeur correspondant au radiobutton coché mais le binding et/ou la création des propriétés ce n'est pas mon fort ( je ne sais pas ce qui correspond à ce que je veux faire).

    Merci

  2. #2
    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 ne peux pas faire ca: ou tu passes par la RadioButtonListBox du Bag O Trick de Kevin Moore, ou alors tu utilises la propriété GroupName.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    J'ai essayé de faire ça en modifiant le style d'une listbox en radiobutton mais graphiquement ce n'est pas aussi pratique.

    Du coup, j'utilise des GroupName je récupére la propriété ischecked (booléen) et je la multiplie par le coefficient voulu.

    mais l'idée aurait été de pouvoir fixer la valeur directement dans chaque radiobutton avec une propriété qui s'appellerait par exemple Value mais qui ne semble malheureusement pas exister (un peu comme la value d'une option dans un label en asp).

  4. #4
    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 pansoul
    J'ai essayé de faire ça en modifiant le style d'une listbox en radiobutton mais graphiquement ce n'est pas aussi pratique.
    La dessus, WPF te permet de faire ce que tu veux au niveau graphique.
    Un exemple :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
            <ListBox x:Name="ListBoxRadioBtn" Background="Transparent" BorderThickness="1" BorderBrush="LightSteelBlue"
                     Margin="5,0,5,0" HorizontalAlignment="Right"                  
                     Tag="{Binding RelativeSource={RelativeSource AncestorType={x:Type exp:ExpanderCtrl}}, Path=Tag}">
              <ListBox.Style>
                <Style TargetType="{x:Type ListBox}">
                  <Setter Property="Template">
                    <Setter.Value>
                      <ControlTemplate TargetType="{x:Type ListBox}" >
                        <StackPanel Orientation="Horizontal" IsItemsHost="True" />
                      </ControlTemplate>
                    </Setter.Value>
                  </Setter>
                </Style>
              </ListBox.Style>
              <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                  <Setter Property="SnapsToDevicePixels" Value="true"/>
                  <Setter Property="OverridesDefaultStyle" Value="true"/>
                  <Setter Property="Margin" Value="1,0,1,0" />
                  <Setter Property="Padding" Value="1,0,1,0" />
                  <Setter Property="Template">
                    <Setter.Value>
                      <ControlTemplate TargetType="{x:Type ListBoxItem}">
                        <Border x:Name="Bd" CornerRadius="10,10,10,10" BorderThickness="0,0,0,0" 
                                Background="Transparent" Padding="{TemplateBinding Padding}" >
                          <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                            VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                        </Border>
                        <ControlTemplate.Triggers>
                          <Trigger Property="IsSelected" Value="true">
                            <Setter Property="Background" Value="Transparent" TargetName="Bd"/>
                          </Trigger>
                          <Trigger Property="IsMouseOver" Value="true">
                            <Setter Property="Background" Value="Transparent" TargetName="Bd"/>
                          </Trigger>
                          <MultiTrigger>
                            <MultiTrigger.Conditions>
                              <Condition Property="IsMouseOver" Value="true" />
                              <Condition Property="IsSelected" Value="true" />
                            </MultiTrigger.Conditions>
                            <MultiTrigger.Setters>
                              <Setter Property="Background" Value="Transparent" TargetName="Bd"/>
                            </MultiTrigger.Setters>
                          </MultiTrigger>
                          <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource DisabledForegroundBrush}"/>
                          </Trigger>
                        </ControlTemplate.Triggers>
                      </ControlTemplate>
                    </Setter.Value>
                  </Setter>
                </Style>
              </ListBox.ItemContainerStyle>
     
              <ListBoxItem IsSelected="True" >
                <RadioButton x:Name="RadioBtnTous" Content="Tous" 
                             IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
              </ListBoxItem>
              <ListBoxItem>
                <RadioButton x:Name="RadioBtnAvec" Content="Avec" 
                             IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
              </ListBoxItem>
              <ListBoxItem>
                <RadioButton x:Name="RadioBtnSans" Content="Sans" 
                             IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}, Path=IsSelected}" />
              </ListBoxItem>
            </ListBox>

    Juste pour dire que graphiquement, tu peux très facilement personnaliser ta ListBox

    Tu peux encore améliorer et définir le style du ListBoxItem pour qu'il soit directement un RadioButton.

    Sinon après un simple ListBoxRadioBtn.SelectedItem te donnera le radioButton coché.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    quand je disais que ce n'était pas aussi pratique, c'est parceque j'ai plusieurs listbox dans mon document et je veux que :
    les 1er éléments de listbox1, listbox2, listbox3... soient alignés
    les 2eme éléments de listbox1, listbox2, listbox3... soient alignés
    ...
    mais une listbox a son organisation interne et ses éléments ne peuvent pas faire référence au Grid.column et Grid.Row du document général.

    Par contre je peux placer mes radiobutton comme je veux et ensuite utiliser groupname qui fonctionne que les radiobox soient ou non dans le meme conteneur.

    En ce qui concerne le ListBox.SelectedIndex, il renvoie 0,1,2... et ce que je voulais c'est plutot 8,17,3... donc pour ca j'utilise plutot le code behind ou je multiplie le booleen ischecked de chaque radiobox par la valeur correpondante (plutot que de faire une table de correspondance 0->8, 1->17, 2->3 qui serait probablement plus compliqué).

    J'ai bien essayé de filouter en assignant x:name de chaque élément d'une listbox à 8,17,3 mais on ne pas mettre qu'un nombre, il faut aussi des caractères (et je ne suis pas fou de ce genre de bidouille si on ne peut pas le faire il y a surement une raison, peut etre le typage fort ?).

    en tout cas merci pour vos réponses

  6. #6
    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 pansoul
    En ce qui concerne le ListBox.SelectedIndex, il renvoie 0,1,2... et ce que je voulais c'est plutot 8,17,3...
    SelectedIndex je suis d'accord, moi je parlais plutôt de SelectedItem. Après si tu es parvenu à faire ce que tu voulais c'est le principal

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    oui j'ai vu que tu parlais de SelectedItem mais cela renvoie le content de l'item par exemple "choix1" "choix2" "choix3" et non pas une valeur que je souhaiterais lier a chaque choix comme 8,17,13.
    Donc je suis de toute facon obligé de placer ces valeurs quelque part en c#.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Points : 32
    Points
    32
    Par défaut
    Je relance car je viens de faire quelque chose comme l'exemple que je donnais au début

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <StackPanel Name="StackPanel1" Propiété_valeur>
    	    <RadioButton Propiété_valeur = 1>Valeur 1</RadioButton>
                <RadioButton Propiété_valeur = 5>Valeur 2</RadioButton>
                <RadioButton Propiété_valeur = 7>Valeur 3</RadioButton>
            </StackPanel>
    avec une dependency property ajouter a la classe radiobutton.

    Par contre blend ne me montre pas le radiobutton personnalisé, j'ai le message :
    "La propriété 'valeur_radiobutton' a déjà été inscrite par 'RadioButton'"

    c'est surement parceque je déclare aussi une propriété CLR pour accéder a 'valeur_radiobutton' depuis le code, mais le programme fonctionne.
    d'ailleurs l'intellisense n'a pas l'air de fonctionne avec ma classe radiobutton_modifie et valeur_radiobutton.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/04/2015, 20h16
  2. Re ordonner des valeurs dans un groupe
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 11/06/2008, 15h50
  3. creer un groupe avec le reste des valeurs nulles
    Par aurelie83 dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 03/01/2008, 14h32
  4. groupe d'option : récupérer des valeurs
    Par mouaa dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/08/2007, 12h33
  5. Group BY qui m'enleve des valeurs
    Par EpOnYmE187 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/03/2006, 16h52

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