Je trouve cela beaucoup plus facile de le faire aussi dans le code derrière. Si ces méthodes ok, un morceau assez facile de code exemple:
ContextMenu cm = new ContextMenu();
cm.Items.Clear();
MenuItem mi;
mi = new MenuItem();
mi.Header = "myHeader";
mi.Click += new RoutedEventHandler(menuItemAlways_Click);
cm.Items.Add(mi); //this item will always show up
if(someCondition())
{
mi = new MenuItem();
mi.Header = "myConditionalHeader";
mi.Click += new RoutedEventHandler(menuItemConditional_Click);
cm.Items.Add(mi); //This item will show up given someCondition();
}
cm.IsOpen = true;
Il est évident qu'un exemple très simpliste, mais il illustre combien il est facile de le faire dans le code derrière.
EDIT: En réponse à votre commentaire, voici la méthode que je ... Les dernières
//raised upon an event, ie. a right click on a given control
private void DisplayContextMenu(object sender, MouseButtonEventArgs e)
{
ContextMenu cm = GetAssetContextMenu()
//Method which builds context menu. Could pass in a control (like a listView for example)
cm.IsOpen = true;
}
private ContextMenu GetContextMenu()
{
ContextMenu cm = new ContextMenu();
//build context menu
return cm;
}
Cela devrait le rendre un peu plus clair. Evidemment, la méthode GetContextMenu() prendra probablement un certain type de paramètre à partir duquel vous pouvez tirer un certain type d'état prorgam - par exemple, si vous cliquez sur listView, vous pouvez alors obtenir une valeur pour "listView.SelectedItem", à partir de laquelle vous pourriez Construire le contextMenu conditionnel. J'espère que c'est clair, je me sens un peu brumeux en ce moment.
Merci pour l'exemple de code! Pourriez-vous, s'il vous plaît, donner une idée de comment connecter ce menu contextuel généré à un objet particulier sur une page? – rem
Dois-je créer un ContextMenu vide en XAML et créer des éléments de menu dans le gestionnaire d'événements "ContextMenuOpening"? – rem
Merci! Pourriez-vous s'il vous plaît dire, pourquoi le menu contextuel, ouverture sur l'événement MouseRightButtonDown, reste ouvert pendant une seconde ou deux, clignote juste. Que dois-je faire en plus de "cm.IsOpen = true;"? – rem