2010-01-15 76 views
2

我怎麼能添加一些條件變化的MenuItems的名單在WPF上下文菜單,根據點擊的對象的某些屬性?:如何將條件添加到WPF上下文菜單?

<Grid.ContextMenu> 
<ContextMenu> 
    <MenuItem Name="EditStatusCm" Header="Change status" /> 
    ... 
    <MenuItem ... /> 
</ContextMenu>     
</Grid.ContextMenu> 

回答

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。我希望這是明確的,我現在感覺有點模糊。

+0

感謝您的代碼示例!您能否介紹一下如何將生成的上下文菜單連接到頁面上的特定對象? – rem 2010-01-15 16:38:19

+0

我應該在XAML中創建空的ContextMenu並在「ContextMenuOpening」事件處理程序中構建菜單項嗎? – rem 2010-01-15 16:42:19

+0

謝謝!你能告訴,爲什麼在MouseRightButtonDown事件上打開的上下文菜單保持打開一秒左右,只是閃爍。除「cm.IsOpen = true;」之外,我應該怎麼做? – rem 2010-01-15 18:38:46

1

我建立我的上下文菜單中的隱藏代碼動態的「的ContextMenuOpening」事件。它工作得非常好。這樣我可以實時查看所有變量。我通常創建一個上下文菜單,其中包含我知道每次需要的所有內容,然後在顯示它之前在代碼中修改它。我會發布一些代碼,但它是專有的。

相關問題