Pregunta

En mi herramienta DSL personalizada Quiero un nodo en su explorador que no puede ser eliminado. Aparte de eso, quiero que sea como un nodo normal. Básicamente lo que quiero es un nodo como el XML Comportamiento serialización en el Explorador de DSL:

ilustración serialización XML Comportamiento menú contextual http://img31.imageshack.us/img31 /740/xmlserializerbehavior.png

A través del uso del reflector de la clase XmlSerializationDefinitionSerializer en la asamblea Microsoft.VisualStudio.Modeling.Sdk.DslDefinition.dll he descubierto que es sólo un derivado de DomainClass, por lo que no hay nada (obviamente) de especial.

He definido un DomainClass que funciona como el nodo, y el botón derecho del ratón se me permite añadir sub-nodos sólo la forma en que quiero que funcione, simplemente no puede deshacerse de esa opción de menú Eliminar:

Eliminar ilustración elemento de menú contextual http://img705.imageshack.us/img705/ 9033 / validators.png

He intentado todo lo que se me ocurre ... He puesto el colocador de propiedad privada a, se pone alrededor de ese, lo he instalado a la multiplicidad 1..1, que no tiene otro efecto que dar errores cuando el nodo "validadores" no se encuentra ... he mirado en todas las propiedades, tanto para el DomainClass y para el DomainRelationship entre el modelo de la raíz y de la clase de dominio validadores y ninguno de ellos parece que lidiar con esto. También he mirado todo en el nodo Comportamiento en la ventana Explorador de DSL Explorer. Estoy completamente confundido. ¿Alguien sabe cómo hacer esto?

¿Fue útil?

Solución

De acuerdo, después de un poco de una extensa investigación, descubrí cómo hacer esto. Esto es lo que hice, en caso de que alguien más tiene la respuesta a mi pregunta en el futuro. Debe crear una clase parcial para DesignerExplorer de su modelo DSL (Está en el proyecto DslPackage, creado por el archivo ModelExplorer.tt) y poner el siguiente código en él:

internal partial class MyDesignerExplorer
{
    /// <summary>
    /// Override to stop the "Delete" command appearing for
    /// Validators.
    /// </summary>
    protected override void ProcessOnStatusDeleteCommand( MenuCommand command )
    {
        // Check the selected items to see if they contain
        // Validators.
        if( this.SelectedElement.GetType()== typeof( Validators ) ) 
        {
            // Disable the menu command
            command.Enabled = false;
            command.Visible = false;
        }
        else
        {
            // Otherwise, delegate to the base method.
            base.ProcessOnStatusDeleteCommand( command );
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top