Salut,
Je suis en train d'essayer de réaliser une GroupBox qui a 2 en-têtes (un à gauche et un à droite). Après avoir un peu galéré à essayer de customiser le Template d'une GroupBox ou d'un HeaderedContentControl, j'ai finalement créé un contrôle personnalisé "DualHeaderGroupBox", qui hérite de ContentControl, et définit 2 propriétés LeftHeader et RightHeader.
Pour réaliser le template pour ce contrôle, j'ai reproduit celui par défaut d'une GroupBox (en l'examinant avec Snoop), en ajoutant juste un en-tête en haut à droite. Le résultat est satisfaisant, sauf un truc qui commence à sérieusement me gonfler
En fait, la bordure de la GroupBox, qui normalement est masquée par le texte de l'en-tête, reste visible, comme le montre cette image :
Alors qu'avec une GroupBox normal ça donne ça :
Voilà le style complet pour mon contrôle :
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 <Style TargetType="{x:Type ctl:DualHeaderGroupBox}"> <Setter Property="BorderBrush" Value="#FFD5DFE5"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ctl:DualHeaderGroupBox}"> <Grid> <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="Auto"/> <ColumnDefinition Width="6"/> </Grid.ColumnDefinitions> <Border Name="GroupBoxBorder" Grid.Row="1" Grid.Column="0" Grid.RowSpan="3" Grid.ColumnSpan="5" CornerRadius="4" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"/> <Border Name="LeftHeader" Grid.Row="0" Grid.Column="1" Grid.RowSpan="2" HorizontalAlignment="Left" Padding="3,1,3,0"> <ContentPresenter ContentSource="LeftHeader"/> </Border> <Border Name="RightHeader" Grid.Row="0" Grid.Column="3" Grid.RowSpan="2" HorizontalAlignment="Right" Padding="3,1,3,0"> <ContentPresenter ContentSource="RightHeader"/> </Border> <ContentPresenter Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3" ContentSource="Content"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
Bien sûr, je pourrais forcer le Background de LeftHeader et RightHeader pour masquer ce qu'il y a derrière, mais mais c'est pas très propre, et d'ailleurs dans le template de la GroupBox standard ils laissent la valeur par défaut... je suppose que j'ai du oublier un truc, mais j'ai beau examiner chaque élément du template avec Snoop, je vois pas laquelle...
Auriez-vous une idée pour régler ça ? Merci d'avance
PS: au fait, en ce moment j'utilise Snoop pour examiner le template de la GroupBox standard, mais y a-t-il un moyen plus simple ? Idéalement, j'aimerais voir le XAML de ce template... mais je sais pas si c'est possible
Partager