Мне намного проще сделать это в коде. Если это методы хорошо, довольно простой кусок образец кода:
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;
Очевидно, что очень упрощенный пример, но он показывает, как легко это сделать в коде позади.
EDIT: В ответ на ваш комментарий, вот метод, который я в последний раз использовал ...
//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;
}
Это должно сделать это немного яснее. Очевидно, что метод GetContextMenu(), вероятно, примет какой-то параметр, из которого вы можете вывести какое-то состояние prorgam - например, если вы нажмете на listView, вы можете получить значение для «listView.SelectedItem», из которого вы могли бы создать условный контекстMenu. Надеюсь, это ясно, я чувствую себя немного туманным на данный момент.
Спасибо за пример кода! Не могли бы вы дать представление о том, как подключить это сгенерированное контекстное меню к определенному объекту на странице? – rem
Должен ли я создавать пустой ContextMenu в XAML и создавать элементы меню в обработчике событий ContextMenuOpening? – rem
Спасибо! Не могли бы вы рассказать, почему Контекстное меню, открывающее событие MouseRightButtonDown, остается открытым на секунду или около того, просто мигает. Что мне делать в дополнение к «cm.IsOpen = true»? – rem