Bonjour,
J'ai écrit dans le fichier generic.xaml le code suivant qui marche, pour ajouter un menu déroulant à mon custom control TabControl2 (ouais, je sais, le nom... Mais j'expérimente simplement), dérivé de TabControl :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <ContextMenu x:Key="TabContextMenu"> <MenuItem Header="Context menu"/> </ContextMenu> <Style TargetType="{x:Type local:TabControl2}" BasedOn="{StaticResource {x:Type TabControl}}"> <Setter Property="TabPanel.ContextMenu" Value="{StaticResource TabContextMenu}" /> </Style>
Et ça marche. Quel est le problème alors ? C'est qu'avant d'en arriver là, j'avais fait l'essai suivant :
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <Style TargetType="{x:Type local:TabControl2}" BasedOn="{StaticResource {x:Type TabControl}}"> <Setter Property="TabPanel.ContextMenu"> <Setter.Value> <ContextMenu> <MenuItem Header="Context menu bis"/> </ContextMenu> </Setter.Value> </Setter> </Style>
A ce que j'ai cru comprendre au XAML, ce code devrait être équivalent au premier (mais mieux, car évitant de polluer le dictionnaire avec une information privée). Or s'il compile, il plante à l'exécution :
Quelqu'un pourrait-il m'expliquer la différence profonde entre ces deux bouts de code ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Impossible d'ajouter un contenu de type 'System.Windows.Controls.ContextMenu' à un objet de type 'System.Object'.
Merci !
Partager