wpf - 如何向 WPF 上下文菜单添加条件?

标签 wpf silverlight xaml contextmenu

如何根据单击对象的某些属性添加一些条件来更改 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/

相关文章:

c# - 如何创建向后兼容 Windows 7 的缩放和大小更改的每显示器 DPI 感知应用程序?

silverlight - 是否有 Silverlight/wp7 的 MonoTouch.Dialog 端口?

c# - 如何从 StreamGeometry 中提取 Point 对象?

c# - 将画笔的 ResourceDictionary 获取到 ItemsList 中

WPF Popup IsOpen 问题

silverlight - GUI/ View 不会注意到 View 模型的变化。谁应该通知?

c# - 将摩尔斯电码解码为文本

xaml - 无法将字符串转换为字符串

c# - 如何使用wpf xaml绘制均匀间隔的对角线文本

c# - Keyboard.Focus 不适用于 WPF 中的文本框