Bonjour à tous,

J'essaie (encore) de créer un bandeau de menu modulaire qui pourrait changer en fonction de l'application lancée. J'ai donc réussi à créer mon user control avec un TabControl et tout et tout, j'arrive à charger et à décharger un bandeau simple (j'entends par simple, un bandeau avec seulement un bouton )

Voici le code de mon bandeau

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
 
<UserControl x:Class="SDK.Ribbon"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SDK"
    Height="130" >
    <Grid>
<Border DockPanel.Dock="Top" CornerRadius="4,4,4,4" BorderThickness="1" Margin="0,0,0,0">
            <local:MenuTabControl VerticalAlignment="Bottom" Margin="50,0,0,0" x:Name="tabControl">
                <local:MenuTabItem Header="toto" />
                <local:MenuTabItem Header="tota" />
            </local:MenuTabControl>
        </Border>
    </Grid>
</UserControl>
Le .cs

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
 
public partial class Ribbon : UserControl
    {
        public Ribbon()
        {
            InitializeComponent();
        }
 
        public void LoadRibbon(Uri uri)
        {
            XmlReader reader = XmlReader.Create(uri.ToString());
 
            MenuTabControl sd = (MenuTabControl) XamlReader.Load(reader);
 
            this.tabControl.LoadTabControl(sd);
        }
 
        public void LoadRibbon(string ribbon)
        {
            StringReader stringReader = new StringReader(ribbon);
            XmlReader xmlReader = XmlReader.Create(stringReader);
 
            MenuTabControl sd = (MenuTabControl)XamlReader.Load(xmlReader);
 
            this.tabControl.LoadTabControl(sd);
        }
 
        public void Clear()
        {
            tabControl.Clear();
        }
    }
Maintenant le TabControl

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
 
public class MenuTabControl: TabControl
    {
        static MenuTabControl()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MenuTabControl), new FrameworkPropertyMetadata(typeof(MenuTabControl)));
        }
 
        public MenuTabControl()
            : base()
        {
            this.Height = 120;
            this.TabStripPlacement = Dock.Top;
        }
 
public void LoadTabControl(MenuTabControl tabContol)
        {
            this.Items.Clear();
 
            foreach (MenuTabItem item in tabContol.Items)
            {
                tabContol.RemoveLogicalChild(item);
                this.Items.Add(item);
            }
        }
 
        public void Clear()
        {
            Items.Clear();
        }
    }
Et les 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
 
public class MenuTabItem : TabItem
    {
        StackPanel _panel;
 
        static MenuTabItem()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MenuTabItem), new FrameworkPropertyMetadata(typeof(MenuTabItem)));
        }
 
        public MenuTabItem()
        {
            _panel = new StackPanel();
            _panel.Orientation = Orientation.Horizontal;
        }
 
        protected override void OnContentChanged(object oldContent, object newContent)
        {
            Console.WriteLine("-----------------");
            Console.WriteLine(newContent.ToString());
            _panel.Children.Add((UIElement) newContent);
 
            //base.OnContentChanged(oldContent, newContent);
        }
    }
ça marchait, jusqu'à l'ajout de l'override sur OnContentChanged. En fait, je voudrais qu'à l'ajout d'un item dans le xaml, l'item s'ajoute dans le StackPanel.

Quand j'execute mon programme, ça donne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Must disconnect specified child from current parent Visual before attaching to new parent Visual.
Auriez vous une idée sur comment faire pour règler ça?

Merci