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
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 <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>
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
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(); } }
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
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(); } }
ç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.
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); } }
Quand j'execute mon programme, ça donne
Auriez vous une idée sur comment faire pour règler ça?
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.
Merci![]()
Partager