Bonsoir,

Je cherche à personnaliser le style d'une combobox. J'ai trouvé cette page qui explique comment modifier le template:

http://msdn.microsoft.com/en-us/library/ms752094.aspx

J'ai commencé à reprendre le code et l'adapter à mon besoin mais j'ai un petit problème. Quand je clique sur le bouton qui est censé faire apparaitre la liste des choix de ma combobox, elle n'apparait pas. Cependant quand je met l'attribut IsOpen à True pour mon popup dans le template, là la liste apparait bien. Donc je ne vois pas d'où viens le problème. Voici pour le moment le code qui définis le template:

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
 <Style x:Key="cmbboxButton" TargetType="{x:Type ToggleButton}">
        <Setter Property="Background">
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                    <GradientStop Color="#f8f8f8" Offset="0.1"></GradientStop>
                    <GradientStop Color="#dfdfdf" Offset="1"></GradientStop>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition />
                            <ColumnDefinition Width="20"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
 
                        <Border Grid.ColumnSpan="2" Name="FirstBorder" BorderThickness="0 1 0 0" BorderBrush="#cbcbcb" CornerRadius="10" Background="{TemplateBinding Background}" />
                        <Border Grid.ColumnSpan="2" Name="SecondBorder" BorderThickness="1 0 1 1" BorderBrush="#929292" CornerRadius="10" />
                        <Path x:Name="Arrow" Fill="#465257" HorizontalAlignment="Center" VerticalAlignment="Center"
                              Grid.Column="1" Data="M 0 0 L 4 4 L 8 0 Z"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsPressed" Value="True">
                            <Setter TargetName="FirstBorder" Property="BorderBrush" Value="#6e6e6e"></Setter>
                            <Setter TargetName="FirstBorder" Property="BorderThickness" Value="1 1 1 0"></Setter>
                            <Setter TargetName="SecondBorder" Property="BorderThickness" Value="0 0 0 0"></Setter>
                            <Setter Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                                        <GradientStop Color="#c9c9c9" Offset="0.6"></GradientStop>
                                        <GradientStop Color="#c4c4c4" Offset="1"></GradientStop>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
 
    <Style x:Key="cmbboxStyle" TargetType="{x:Type ComboBox}">
        <Setter Property="SnapsToDevicePixels" Value="True"></Setter>
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="MinWidth" Value="100"></Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ComboBox}">
                    <Grid>
                        <ToggleButton Style="{StaticResource cmbboxButton}" ClickMode="Press"/>
                        <Popup Placement="Bottom" PopupAnimation="Slide" Focusable="False"> 
                            <Grid>
                                <ScrollViewer>
                                    <StackPanel IsItemsHost="True"></StackPanel> 
                                </ScrollViewer>
                            </Grid>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Je vous l'accord j'ai pas tous repris de l'exemple sur MSDN. Mais je pensais que avec juste ce que j'ai fais je pouvais déjà faire apparaitre au moins la liste, même très basique. Mais cela ne marche pas. Sauriez-vous d'où provient le problème? Ai-je oublier quelque chose de très important?

Je vous remercie d'avance.