我怎麼能添加一些條件變化的MenuItems的名單在WPF上下文菜單,根據點擊的對象的某些屬性?:如何將條件添加到WPF上下文菜單?
<Grid.ContextMenu>
<ContextMenu>
<MenuItem Name="EditStatusCm" Header="Change status" />
...
<MenuItem ... />
</ContextMenu>
</Grid.ContextMenu>
我怎麼能添加一些條件變化的MenuItems的名單在WPF上下文菜單,根據點擊的對象的某些屬性?:如何將條件添加到WPF上下文菜單?
<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()方法可能會採用某種參數來從中拉出某種prorgam狀態 - 例如,如果您單擊listView,則可以獲得「listView.SelectedItem」的值,您可以從中建立條件contextMenu。我希望這是明確的,我現在感覺有點模糊。
我建立我的上下文菜單中的隱藏代碼動態的「的ContextMenuOpening」事件。它工作得非常好。這樣我可以實時查看所有變量。我通常創建一個上下文菜單,其中包含我知道每次需要的所有內容,然後在顯示它之前在代碼中修改它。我會發布一些代碼,但它是專有的。
感謝您的代碼示例!您能否介紹一下如何將生成的上下文菜單連接到頁面上的特定對象? – rem 2010-01-15 16:38:19
我應該在XAML中創建空的ContextMenu並在「ContextMenuOpening」事件處理程序中構建菜單項嗎? – rem 2010-01-15 16:42:19
謝謝!你能告訴,爲什麼在MouseRightButtonDown事件上打開的上下文菜單保持打開一秒左右,只是閃爍。除「cm.IsOpen = true;」之外,我應該怎麼做? – rem 2010-01-15 18:38:46