如何根据单击对象的某些属性添加一些条件来更改 WPF 上下文菜单中的 MenuItems 列表?:
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" />
...
<MenuItem ... />
</ContextMenu>
</Grid.ContextMenu>
最佳答案
我发现在后面的代码中也更容易做到这一点。如果这个方法没问题,那么一段相当简单的示例代码:
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() 方法可能会采用某种参数,您可以从中提取某种程序状态 - 例如,如果您单击 listView,则可以获取“listView.SelectedItem”的值,从中您可以建立条件上下文菜单。我希望这是清楚的,我现在感觉有点模糊。
关于wpf - 如何向 WPF 上下文菜单添加条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071932/