Un detalle que no comenté en su día es que, en el archivo de creación de menús (.ctc), una de las opciones que podemos especificar son una serie de FLAGS que determinarán el comportamiento del menú. Por ejemplo, en la siguiente definición, la línea 9 determina que este menú por defecto aparecerá en modo no visible y que será posible cambiar la propiedad Visible del mismo.
1 // Add additional button definitions here.
2 // Command, Parent Group, Priority, Image, Type, Visibility, Text;
3 //guidCmdSet:duplicate, guidCmdSet:grpidContextMain, 0x0100, OI_NOID, BUTTON, DIS_DEF, "&Display Selected Item Information";
4 guidCmdSet:duplicate, // Command ID
5 guidCmdSet:grpidContextMain, // Group ID
6 0x0100, // Priority
7 IconDuplicate, // Icon ID
8 BUTTON, // Button Type
9 DEFAULTINVISIBLE | DYNAMICVISIBILITY, // Flags
10 "&Duplicate", // Command Text
11 "&Duplicate", // Menu Text
12 "Duplicate", // ToolTip Text
13 "Duplicate", // Command Well Text
14 "Duplicate", // English Command Name
15 "Duplicate"; // Localized Command Name
Luego en la implementación de la función que se encarga de evaluar si se debe mostrar o no, un elemento del menú; implemento una pequeña función que por defecto deja invisible el elemento del menú, a menos que el elemento selecccionado sea un Shape del tipo UserShape.
1 /// <summary>
2 /// Called when [duplicate menu display action].
3 /// </summary>
4 /// <param name="sender">The sender.</param>
5 /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
6 internal void OnDuplicateMenuDisplayAction(object sender, EventArgs e)
7 {
8 MenuCommand command = sender as MenuCommand;
9
10 // The popmenu command is by default disabled
11 command.Visible = false;
12 command.Enabled = false;
13
14 foreach (object selectedObject in this.CurrentSelection)
15 {
16 // validate if the selected element is a User Shape
17 if (selectedObject is ElBruno.Dsl15.UserShape)
18 {
19 command.Visible = true;
20 command.Enabled = true;
21 break;
22 }
23 }
24 }
De esta forma logramos que en el menú contextual que tenemos disponible sobre nuestro diagrama; la opción Duplicate sólo este visible cuando despleguemos el menú contextual sobre un Usuario. En el siguiente video la demo: