Est-il possible dans WPF de définir une structure de menu et de l'utiliser dans plusieurs contextes? Par exemple, je voudrais utiliser un ensemble d'éléments de menu à partir des ressources dans ContextMenu, menu de la fenêtre et ToolBar (ToolBar avec des icônes seulement, sans en-têtes). Donc l'ordre des items, les commandes, les icônes, les séparateurs ne doivent être définis qu'une seule fois.Utilisation multiple de MenuItems déclarés une seule fois (WPF)
je cherche quelque chose comme ceci:
Déclarationressources:
<MenuItem Command="MyCommands.CloneObject"
CommandParameter="{Binding SelectedObject}" Header="Clone">
<MenuItem.Icon>
<Image Source="Images\Clone.png" Height="16" Width="16"></Image>
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="MyCommands.RemoveCommand"
CommandParameter="{Binding SelectedObject}" Header="Remove">
<MenuItem.Icon>
<Image Source="Images\Remove.png" Height="16" Width="16"></Image>
</MenuItem.Icon>
</MenuItem>
<Separator/>
<MenuItem Command="MyCommands.CreateChild"
CommandParameter="{Binding SelectedObject}" Header="Create child">
<MenuItem.Icon>
<Image Source="Images\Child.png" Height="16" Width="16"></Image>
</MenuItem.Icon>
</MenuItem>
Utilisation:
<ToolBar MenuItems(?)="{Reference to set of items}" ShowText(?)="false" />
et
<ContextMenu MenuItems(?)="{Reference to set of items}" />
C'est un bon moyen de le faire. En passant, ce que vous avez écrit ici est en fait un "contrôle utilisateur" qui est légèrement différent d'un "contrôle personnalisé". Un contrôle personnalisé n'a aucun fichier XAML et aucun appel InitializeComponent. Au lieu de cela, il définit son DefaultStyleKey et a un style défini dans Themes/Generic.xaml ou l'un de ses dictionnaires fusionnés. Un contrôle utilisateur, qui est ce que vous avez ici, n'a pas la possibilité d'ajouter du contenu lorsqu'il est utilisé. Un contrôle personnalisé fait. Un contrôle personnalisé est également plus puissant de plusieurs façons. Juste FYI. Votre réponse est bonne. –
Vous avez bien sûr raison. J'étais malpropre :-) J'ai édité ma réponse pour refléter cela. – Goblin