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 :

DataTemplate : Transformer un checkbox en 2 radiobutton


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé Avatar de royto
    Homme Profil pro
    Développeur .Net & Web
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .Net & Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut DataTemplate : Transformer un checkbox en 2 radiobutton
    Bonjour,

    pour mon projet j'ai besoin de remplacer des checkbox par 2 radiobouton (1 pour oui et 1 pour non).

    Pour cela j'ai fait un style qui redéfini le template de mon checkbox avec 2 radiobutton.

    L'affichage est ok mais je n'arrive pas a récupérer le changement de valeur ni a sélectionner le radiobutton en fonction de la valeur de mon bool a l'initialisation.

    Voici le code que j'utilise :
    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
     
    <Style x:Key="{x:Type CheckBox}" TargetType="CheckBox">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="FocusVisualStyle" Value="{StaticResource CheckBoxFocusVisual}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="CheckBox">
                         <StackPanel Orientation="Horizontal">
                            <ContentPresenter Margin="4,0,0,0"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Left"
                                RecognizesAccessKey="True"/>
                            <RadioButton Margin="2" x:Name="Yes" IsChecked="{TemplateBinding IsChecked}">Oui</RadioButton>
                            <RadioButton Margin="2" x:Name="No" IsChecked="{TemplateBinding IsChecked, Converter={StaticResource OppositeBoolConverter}}>Non</RadioButton>
                        </StackPanel>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Yes" Property="IsEnabled" Value="false" />
                                <Setter TargetName="No" Property="IsEnabled" Value="false" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    Merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Le comportement du Checkbox et du RadioButton n'est pas vraiment le même.

    Pourquoi ne pas remplacer physiquement le checkbox par le radiobutton plutot que de passer par un Style ?

    Peut-être ai-je mal compris ton problème ?

  3. #3
    Membre confirmé Avatar de royto
    Homme Profil pro
    Développeur .Net & Web
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .Net & Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    ben, je veux mapper sur un booléen ==> checkbox

    mais mon client veut 2 radio buttons ==> Oui / Non

    Donc je voulais passer par un style pour facilement revenir a une checkbox si besoin

    APres si c'est pas possible j'utiliserais 2 radio button

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Le problème, c'est qu'il faudrait que ton Binding soit en mode TwoWay, et avec TemplateBinding on ne peut pas le préciser. A la place, il faut utiliser un Binding normal, avec TemplatedParent comme RelativeSource :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        <RadioButton Margin="2"
                     x:Name="Yes"
                     IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={x:Static RelativeSource.TemplatedParent}}">Oui</RadioButton>

    J'ai testé, ça marche nickel.

    Pour le RadioButton "non", tu peux le laisser comme il est

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Par défaut
    Attention il y a problème de binding sur les RadioButton : http://geekswithblogs.net/claraoscur...17/125901.aspx

  6. #6
    Membre confirmé Avatar de royto
    Homme Profil pro
    Développeur .Net & Web
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .Net & Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    Merci beaucoup,

    ca marche nickel avec qq ajustements

    Voici le code
    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
    <Style x:Key="{x:Type CheckBox}" TargetType="CheckBox">
            <Style.Resources>
                <converter:OppositeBoolToBoolConverter x:Key="OppositeBoolConverter" />
            </Style.Resources>
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="FocusVisualStyle"	Value="{StaticResource CheckBoxFocusVisual}"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="CheckBox">
                         <StackPanel Orientation="Horizontal">
                            <ContentPresenter Margin="4,0,0,0"
                                VerticalAlignment="Center"
                                HorizontalAlignment="Left"
                                RecognizesAccessKey="True"/>
                            <RadioButton Margin="2" x:Name="Yes" IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={x:Static RelativeSource.TemplatedParent}}">Oui</RadioButton>
                            <RadioButton Margin="2" x:Name="No" IsChecked="{Binding IsChecked, Mode=TwoWay, RelativeSource={x:Static RelativeSource.TemplatedParent}, Converter={StaticResource OppositeBoolConverter}}">Non</RadioButton> 
                        </StackPanel>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="false">
                                <Setter TargetName="Yes" Property="IsEnabled" Value="false" />
                                <Setter TargetName="No" Property="IsEnabled" Value="false" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par matdur Voir le message
    Attention il y a problème de binding sur les RadioButton : http://geekswithblogs.net/claraoscur...17/125901.aspx
    Intéressant ce lien
    Donc effectivement il vaut mieux passer aussi le RadioButton "Non" en binding TwoWay

  8. #8
    Membre confirmé Avatar de royto
    Homme Profil pro
    Développeur .Net & Web
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .Net & Web

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Par défaut
    Petit update,

    pour pouvoir utiliser la commande du checkbox j'ai rajouté ce code sur chaque radiobutton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <RadioButton Command="{Binding Command, RelativeSource={x:Static RelativeSource.TemplatedParent}}" ... />

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

Discussions similaires

  1. Transformer un sous formulaire en checkbox
    Par leroimarco dans le forum IHM
    Réponses: 6
    Dernier message: 15/10/2008, 08h49
  2. RadioButton et CheckBox
    Par breizh44 dans le forum Débuter
    Réponses: 8
    Dernier message: 21/02/2008, 22h51
  3. transformer une valeur 0 ou 1 en checkbox ?
    Par kikidrome dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/09/2007, 14h51
  4. data avec CheckBox ? (comme RadioButton)
    Par philip40 dans le forum Flash
    Réponses: 1
    Dernier message: 11/01/2007, 16h49
  5. [debutant] radiobutton et checkbox
    Par YAMKI dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 12/01/2005, 16h20

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