在主机中解决
如果您想在工作流设计器主机上解决这个问题,而不是在单个活动中,这样做非常简单直接。
当您托管工作流设计器并创建工作流设计器时,您可以简单地访问其ContextMenu
属性并修改其Items
集合。
var wfd = new WorkflowDesigner();
wfd.ContextMenu.Items.Add(new MenuItem() { Header = "Hello", Command = yourCommand, });
如果您想为每个活动提供不同的菜单项,您可以订阅该SelectionChanged
事件:
wfd.Context.Items.Subscribe<Selection>(SelectionChanged);
然后实现自己的逻辑:
private void SelectionChanged(Selection selection)
{
// Remove old menu item
if (oldMenuItem != null)
{
wfd.ContextMenu.Items.Remove(oldMenuItem);
oldMenuItem = null;
}
var modelItem = selection.PrimarySelection;
if (selection.SelectionCount == 1 && modelItem != null)
{
// Get activity type
var activityType = modelItem.ItemType;
var menuItem = new MenuItem() { /* ... */ };
wfd.ContextMenu.Items.Add(menuItem);
oldMenuItem = menuItem;
}
}
在活动设计器中解决它
如果无论工作流设计器 UI 托管在何处,都希望始终显示特定的上下文菜单项,则可以在活动设计器 XAML 中创建自定义项:
<sap:ActivityDesigner.ContextMenu>
<ContextMenu>
<MenuItem Header="Show" Command="{Binding YourCommand}"/>
</ContextMenu>
</sap:ActivityDesigner.ContextMenu>