How to hide Related, Trading and Send To entries in the right-click menu?

In a WPF app using Eikon .NET Integration API I'm trying to hide all entries in the built-in right-click menu. I used the following code to make sure I didn't miss anything in the enumeration. It successfully hides Print and Edit commands from the right-click menu. However I still see Related, Trading and Send To commands appear upon right-click in my app. These commands appear disabled (grayed out), but not hidden. I'd like to remove them altogether.

AppHost.Menu.OnDisplayContextMenu(builder =>
{
foreach(BuiltInCommand cmd in System.Enum.GetValues(typeof(BuiltInCommand)))
{
builder.HideBuiltInMenuItem(cmd);
}
});

Best Answer

  • The problem happens when the application uses both IMenuBuilder.HideBuiltInMenuItem() and ContextService.Subscribe(), as shown below.

            public MainControl(IAppHost appHost)
    : this()
    {
    AppHost = appHost;
    AppHost.Closing += AppHostOnClosing;

    //1. Add custom menu and hide
    AppHost.Menu.OnDisplayContextMenu(builder =>
    {
    var openAppMenuItem = new UserMenuItem("Test");
    openAppMenuItem.IsEnabled = true;
    builder.AppendCustomMenuItem(openAppMenuItem);
    foreach (BuiltInCommand cmd in System.Enum.GetValues(typeof(BuiltInCommand)))
    {
    builder.HideBuiltInMenuItem(cmd);
    }
    }
    );
    //2. Subscribe to context
    AppHost.ContextService.Subscribe(ctx =>
    {
    }
    );

    }

    The Related, Trading and Send To commands appear upon right-click. These commands appear disabled, but not hidden.

    image

    However, after removing ContextService.Subscribe() part, the built-in menu items are completely hidden.

            public MainControl(IAppHost appHost)
    : this()
    {
    AppHost = appHost;
    AppHost.Closing += AppHostOnClosing;
    //1. Add custom menu and hide
    AppHost.Menu.OnDisplayContextMenu(builder =>
    {
    var openAppMenuItem = new UserMenuItem("Test");
    openAppMenuItem.IsEnabled = true;


    builder.AppendCustomMenuItem(openAppMenuItem);
    foreach (BuiltInCommand cmd in System.Enum.GetValues(typeof(BuiltInCommand)))
    {
    builder.HideBuiltInMenuItem(cmd);
    }
    }
    );
    }

    image

    I will contact the Eikon team to verify this issue.

Answers

  • As far as I remember, preventing an App to completely redefine Eikon right-click was a design choice (Product), to enforce look and feel consistency. Dev team and product should be involved here.

  • Your code works fine in my environment. After hiding all built-in menu items, I can see only my custom menu after right click.

    image

    You may need to verify the version of Integration API and Eikon. I am using ThomsonReuters.Eikon.Integration.1.2.13.6440 and Eikon 4.0.37555.

  • The Eikon team indicates that this is an expected behaviour.

    If the application uses the context service,
    it means that it wants to be able to navigate from the app instance. So, these
    entries will be added by the desktop.

    If it wants to hide these
    entries, it couldn’t navigate so it doesn’t need to subscribe.