如何在WPF上下文菜单中添加一些更改MenuItem列表的条件,具体取决于点击对象的某些属性?:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" />
...
<MenuItem ... />
</ContextMenu>
</Grid.ContextMenu>
答案 0 :(得分:4)
我发现在后面的代码中更容易实现它。如果这个方法没问题,可以使用相当简单的示例代码:
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;
显然是一个非常简单的例子,但它说明了在后面的代码中做起来有多容易。
编辑:回答你的评论,这是我上次使用的方法......
//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”的值,您可以从中获取建立条件contextMenu。我希望这很清楚,此刻我感觉有点模糊。
答案 1 :(得分:1)
我在“ContextMenuOpening”事件中动态地在代码隐藏中构建我的上下文菜单。它非常好用。这样我就可以实时查看所有变量。我通常会创建一个上下文菜单,其中包含我每次都需要的所有内容,然后在显示它之前在代码后面修改它。我发布了一些代码,但它是专有的。