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 :

Comment créer un GroupBox contenant une CheckBox dans le Header ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut Comment créer un GroupBox contenant une CheckBox dans le Header ?
    Bonjour,

    J'ai créé un DataTemplate pour afficher certains de mes objets persos.
    Ce DataTemplate doit contenir un GroupBox contenant une CheckBox dans le Header (afin d'activer ou désactiver le contenu du GroupBox).

    L'état de cette CheckBox doit être bindé sur une propriété de l'objet affiché dans ce GroupBox personnalisé.

    Comment puis-je faire simplement pour avoir ça ?
    Est-ce faisable juste avec un style ? (notamment le lien entre l'état de ma CheckBox et une des propriétés de mon objet)
    Ou bien dois-je forcément créer un UserControl tout compliqué ?

    Merci !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    voic pour info du code pour mettre une combo dans une colonne d'un listview
    je sais pas si tca peut t'aider mais bon
    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
    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
    68
     
     <ListView ItemsSource="{Binding Source={StaticResource LogsFilter}}" 
                      x:Name="listView1" 
                      ItemContainerStyle="{StaticResource myListViewItemStyle}"  
                      >
                <ListView.View>
                    <GridView AllowsColumnReorder="True" >
                        <Local:FixedWidthGridViewColumn                                    
                                        x:Name="colType"
                                        FixedWidth="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, 
                                        Path=ItemContainerStyle, Converter={StaticResource WidthConv}, ConverterParameter=15}" 
                                        >
                            <GridViewColumnHeader>
                                <Grid Width="{Binding ElementName=colType, Path=FixedWidth}"                                      
                                           Height="20">
                                    <ComboBox HorizontalAlignment="Center"
                                              ItemsSource="{Binding Source={StaticResource LevelValues}}"   
                                              Style="{StaticResource MyComboBoxStyle}"
                                              x:Name="Combobox1"                                          
                                              >
                                        <ComboBox.ItemTemplate>
                                            <DataTemplate>
                                                <StackPanel Orientation="Horizontal">
                                                    <Ellipse Height="18" Width="18" 
                                                             Stroke="{Binding Converter={StaticResource LevelStrokeConverter}}"
                                                             >
                                                        <Ellipse.Fill>
                                                            <RadialGradientBrush GradientOrigin="0.312,0.32">
                                                                <GradientStop Color="#FFFDFDFD" Offset="0"/>
                                                                <GradientStop Color="{Binding Converter={StaticResource LevelExtendedConverter}}" Offset="1"/>
                                                            </RadialGradientBrush>
                                                        </Ellipse.Fill>
                                                    </Ellipse>
                                                    <CheckBox Margin="2,2,2,2" x:Name="alpha1" 
                                                              Content="{Binding}" Tag="{Binding}" 
                                                              Click="CheckBox_Click"
                                                              VerticalAlignment="Center"/>
                                                </StackPanel>
                                            </DataTemplate>
                                        </ComboBox.ItemTemplate>
                                    </ComboBox>                                
                                </Grid>
                            </GridViewColumnHeader>
                            <GridViewColumn.CellTemplate>
                                <DataTemplate >
                                    <StackPanel Orientation="Horizontal" >
                                        <Ellipse Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=ActualHeight, Converter={StaticResource ReduceConverter}}" 
                                                 Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=ActualHeight, Converter={StaticResource ReduceConverter}}"
                                                 Stroke="Black"
                                                 >
                                            <Ellipse.Fill>
                                                <RadialGradientBrush GradientOrigin="0.312,0.32">
                                                    <GradientStop Color="#FFFDFDFD" Offset="0"/>
                                                    <GradientStop Color="{Binding Path=Level, Converter={StaticResource LevelColorConverter}}" Offset="1"/>
                                                </RadialGradientBrush>
                                            </Ellipse.Fill>
                                        </Ellipse>
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </Local:FixedWidthGridViewColumn >
                        <GridViewColumn Header="{DynamicResource COL_DATE}" Width="Auto" DisplayMemberBinding="{Binding Path=Date}"/>
                        <GridViewColumn Header="{DynamicResource COL_MESSAGE}" Width="1050" 
                                        HeaderContainerStyle="{StaticResource HeaderLeft}"
                                        DisplayMemberBinding="{Binding Path=Message}"/>
                    </GridView>
                </ListView.View>
            </ListView>
    ceci etant quand on veut mettre une combo dans un header
    on fait
    <composant.header>
    <combobox/>
    </composant.header>

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ouais, et puis tu utilises une ressource statique pour remplir les valeurs de ta ComboBox, alors que moi ce que j'aimerai c'est utiliser une propriété d'une propriété (y'a pas de doublon ) de mon UserControl.

    De plus, comme je dois utiliser cette GroupBox à de nombreuses reprises, j'aimerai bien avoir un truc centralisé (genre un Style, un DataTemplate ou un UserControl).

    Je sais j'en demande beaucoup

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par seiryujay Voir le message
    De plus, comme je dois utiliser cette GroupBox à de nombreuses reprises, j'aimerai bien avoir un truc centralisé (genre un Style, un DataTemplate ou un UserControl).
    Fais toi un petit Custom Control

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ce que j'ai fait et qui marche pas mal (même s'il reste un petit détail à corriger), c'est :
    - créer une classe CheckableGroupBox qui étend GroupBox et dans laquelle j'ai rajouté ma DependencyProperty "IsChecked"
    - ajouter à mon dictionnaire de ressources le Style suivant
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
        <Style TargetType="{x:Type utils:CheckableGroupBox}">
            <Setter Property="BorderBrush"
                    Value="#D5DFE5" />
            <Setter Property="BorderThickness"
                    Value="1" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type utils:CheckableGroupBox}">
                        <Grid SnapsToDevicePixels="true">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="*" />
                                <RowDefinition Height="6" />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="6" />
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="6" />
                            </Grid.ColumnDefinitions>
                            <Border Grid.Column="0"
                                    Grid.ColumnSpan="4"
                                    Grid.Row="1"
                                    Grid.RowSpan="3"
                                    Background="{TemplateBinding Background}"
                                    BorderBrush="Transparent"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    CornerRadius="4" />
                            <ContentPresenter Margin="{TemplateBinding Padding}"
                                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                              Grid.Column="1"
                                              Grid.ColumnSpan="2"
                                              Grid.Row="2" />
                            <Border Grid.ColumnSpan="4"
                                    Grid.Row="1"
                                    Grid.RowSpan="3"
                                    BorderBrush="White"
                                    BorderThickness="{TemplateBinding BorderThickness}"
                                    CornerRadius="4">
                                <Border.OpacityMask>
                                    <MultiBinding Converter="{StaticResource BorderGapMaskConverter}"
                                                  ConverterParameter="7">
                                        <Binding Path="ActualWidth"
                                                 ElementName="Header" />
                                        <Binding Path="ActualWidth"
                                                 RelativeSource="{RelativeSource Self}" />
                                        <Binding Path="ActualHeight"
                                                 RelativeSource="{RelativeSource Self}" />
                                    </MultiBinding>
                                </Border.OpacityMask>
                                <Border BorderBrush="{TemplateBinding BorderBrush}"
                                        BorderThickness="{TemplateBinding BorderThickness}"
                                        CornerRadius="3">
                                    <Border BorderBrush="White"
                                            BorderThickness="{TemplateBinding BorderThickness}"
                                            CornerRadius="2" />
                                </Border>
                            </Border>
                            <Border x:Name="Header"
                                    Grid.Column="1"
                                    Grid.Row="0"
                                    Grid.RowSpan="2"
                                    Padding="3,1,3,0">
                                <StackPanel Orientation="Horizontal">
                                    <CheckBox IsChecked="{TemplateBinding IsChecked}"
                                              VerticalAlignment="Center"
                                              Width="20" />
                                    <TextBlock Text="{TemplateBinding Header}" />
                                </StackPanel>
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    Ce style reprend celui d'un GroupBox normal, sauf 2 petits changements :
    - la description du Header qui est représenté par une CheckBox et un TextBlock
    - la Border "Header" est définie à la fin du ControlTemplate au lieu de l'être en 2ème position dans le template de base et ce afin d'éviter un petit désagrément qui est que lorsqu'on se positionne sur la CheckBox du Header exactement au niveau du cadre du GroupBox, la CheckBox ne prenait pas le focus et on avait beau cliquer, son état ne changeait pas.


    Mon dernier problème est que quand je modifie l'état de ma CheckBox contenue dans le Header, le contenu de ma GroupBox n'est pas grisé...
    Voilà comment je l'utilises :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
                    <utils:CheckableGroupBox x:Name="cbGroupBox"
                                             Header="Error"
                                             IsChecked="{Binding ErrorData.IsEnabled}">
                        <StackPanel x:Name="panelError"
                                    Orientation="Horizontal"
                                    IsEnabled="{Binding ElementName=cbGroupBox, Path=IsChecked}">
                        ...

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Par défaut
    ecoute en faisant ca ca marche
    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
     
    <GroupBox x:Name="cbGroupBox"
     
                      >
                <GroupBox.Header>
                    <CheckBox x:Name="check" />
                </GroupBox.Header>
                    <StackPanel x:Name="panelError"
                                    Orientation="Horizontal"
                                    IsEnabled="{Binding ElementName=check, Path=IsChecked}">
                    <ComboBox Width="150">
                        <ComboBoxItem >sdfsdfsdfsdf</ComboBoxItem>
                        <ComboBoxItem >sdfsdfsdfsdf</ComboBoxItem>
                        <ComboBoxItem >sdfsdfsdfsdf</ComboBoxItem>
                        <ComboBoxItem >sdfsdfsdfsdf</ComboBoxItem>
                        <ComboBoxItem >sdfsdfsdfsdf</ComboBoxItem>
                    </ComboBox>
                </StackPanel>
            </GroupBox>

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

Discussions similaires

  1. Comment créer une CheckBox dans un module Access
    Par schnee dans le forum Access
    Réponses: 3
    Dernier message: 06/03/2014, 22h20
  2. Réponses: 7
    Dernier message: 28/03/2013, 16h13
  3. Réponses: 3
    Dernier message: 23/04/2009, 00h56
  4. Réponses: 4
    Dernier message: 22/05/2007, 15h45
  5. [2.0] Mettre une Checkbox dans le header d'une colonne d'une DatagridView
    Par aurelien.tournier dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/01/2007, 10h27

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