Bonjour à tous,
J'essaie de créer un controle d'oglet un peu comme celui de de IE7 avec un bouton pour créer des onglets et un pour voir la liste des onglets.
Voici ce que j'ai réalisé
(Desktop est ma propre classe de TabItem)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110 namespace SDK { [TemplatePart(Name = "PART_DropDown", Type = typeof(ToggleButton))] [TemplatePart(Name = "PART_NewTabButton", Type = typeof(ButtonBase))] public class Desktops: TabControl { #region Fields private ToggleButton _toggleButton; private ButtonBase _addNewButton; #endregion #region Constructor static Desktops() { DefaultStyleKeyProperty.OverrideMetadata(typeof(Desktops), new FrameworkPropertyMetadata(typeof(Desktops))); } public Desktops() { this.TabStripPlacement = Dock.Bottom; this.AddHandler(Desktop.CloseTabEvent, new RoutedEventHandler(this.CloseTab)); if (this.Template == null) return; } #endregion #region Overrides public override void OnApplyTemplate() { base.OnApplyTemplate(); #region Toggle Button _toggleButton = this.Template.FindName("PART_DropDown", this) as ToggleButton; if (_toggleButton != null) { // create a context menu for the togglebutton ContextMenu cm = new ContextMenu { PlacementTarget = _toggleButton, Placement = PlacementMode.Bottom }; _toggleButton.ContextMenu = cm; _toggleButton.Checked += DropdownButton_Checked; } #endregion #region Add Button _addNewButton = this.Template.FindName("PART_NewTabButton", this) as ButtonBase; if (_addNewButton != null) _addNewButton.Click += ((sender, routedEventArgs) => AddTabItem()); #endregion } protected override bool IsItemItsOwnContainerOverride(object item) { return item is Desktop; } protected override DependencyObject GetContainerForItemOverride() { return new Desktop(); } #endregion #region Events private void CloseTab(object source, RoutedEventArgs args) { Desktop tabItem = args.Source as Desktop; if (tabItem != null) { Desktops tabControl = tabItem.Parent as Desktops ; if (tabControl != null) { if (tabControl.Items.Count > 1) tabControl.Items.Remove(tabItem); } } } public void AddTabItem() { Desktop item = new Desktop { Header = "New Item"}; this.Items.Add(item); } void DropdownButton_Checked(object sender, RoutedEventArgs e) { if (_toggleButton == null) return; _toggleButton.ContextMenu.Items.Clear(); } #endregion
et voici le template que je lui applique
Mon problème est le suivant: si je met ce template, je ne vois pas les onglets créés même s'ils existent (la property Items de TabControl n'est pas vide). Si je met un template vide
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 <Style x:Key="{x:Type local:Desktops}" TargetType="{x:Type local:Desktops}" BasedOn="{StaticResource {x:Type TabControl}}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Grid SnapsToDevicePixels="{Binding Path=SnapsToDevicePixels, RelativeSource={RelativeSource TemplatedParent}}" KeyboardNavigation.TabNavigation="Local"> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition x:Name="RowDefinition0" Height="*" /> <RowDefinition x:Name="RowDefinition1" Height="Auto" /> </Grid.RowDefinitions> <ToggleButton x:Name="PART_DropDown" Grid.Row="1" Height="22" Width="16" VerticalAlignment="Top" Margin="0,-1,0,0" Grid.Column="0" Style="{StaticResource DropDownToggleButtonStyle}" ToolTip="Display all the tabs in a menu"/> <Button x:Name="PART_NewTabButton" Grid.Row="1" Grid.Column="1" Height="22" VerticalAlignment="Top" Margin="-1,-1,0,0" Style="{StaticResource NewTabButtonStyle}" Width="24" ToolTip="Add a New tab" Content="Add" /> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style>
Je vois parfaitement les items que je crée (avec un bouton extérieur).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <Style x:Key="{x:Type local:Desktops}" TargetType="{x:Type local:Desktops}" BasedOn="{StaticResource {x:Type TabControl}}"> </Style>
Pourriez vous m'aiguiller sur l'oublie que j'ai fait pour faire apparaitre mes onglets. Merci
Partager