Question

Dans mon outil DSL personnalisé Je veux un nœud dans son explorateur qui ne peut pas être supprimé. En dehors de cela, je veux que ce soit comme un nœud régulier. Au fond ce que je veux est un noeud comme le Xml sérialisation Comportement dans le DSL Explorer:

Xml sérialisation menu contextuel du comportement illustration http://img31.imageshack.us/img31 /740/xmlserializerbehavior.png

Grâce à l'aide du réflecteur sur la classe XmlSerializationDefinitionSerializer dans l'assemblée Microsoft.VisualStudio.Modeling.Sdk.DslDefinition.dll je l'ai découvert que c'est juste un dérivé de DomainClass, donc il n'y a rien (évidemment) spécial.

J'ai défini une DomainClass qui fonctionne comme le nœud, et un clic droit, il me permet d'ajouter des sous-noeuds juste la façon dont je veux travailler, je ne peux pas me débarrasser de ce menu Supprimer choix:

Supprimer illustration élément de menu contextuel http://img705.imageshack.us/img705/ 9033 / validators.png

J'ai tout essayé que je peux penser ... J'ai mis le poseur de propriété au privé, il se déplace, je l'ai mis à la multiplicité 1..1, qui n'a pas d'autre effet que de donner erreurs lorsque le noeud « valideurs » manque ... J'ai regardé toutes les propriétés à la fois pour le DomainClass et pour le DomainRelationship entre le modèle racine et la classe validateurs de domaine et aucun d'entre eux semblent occuper. Je l'ai aussi regardé tout le nœud du comportement Explorer dans la fenêtre de l'Explorateur DSL. Je suis complètement déconcerté. Quelqu'un sait-il comment faire?

Était-ce utile?

La solution

D'accord, après un peu de recherches approfondies, j'ai découvert comment faire cela. Voici ce que je l'ai fait, au cas où quelqu'un d'autre a besoin de la réponse à ma question à l'avenir. Vous devez créer une classe partielle pour la DesignerExplorer de votre modèle DSL (Il est dans le projet DslPackage, créé par le fichier ModelExplorer.tt) et mettre le code suivant dans le:

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 );
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top