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é

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
(Desktop est ma propre classe de TabItem)

et voici le template que je lui applique

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>
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
 
<Style x:Key="{x:Type local:Desktops}" TargetType="{x:Type local:Desktops}"
           BasedOn="{StaticResource {x:Type TabControl}}">
    </Style>
Je vois parfaitement les items que je crée (avec un bouton extérieur).

Pourriez vous m'aiguiller sur l'oublie que j'ai fait pour faire apparaitre mes onglets. Merci