質問

私のカスタムDSLツールでは、私は削除することはできませんそのエクスプローラでノードをしたいです。それ以外は、私はそれが通常のノードのようになりたいです。基本的に私がしたいことはDSLエクスプローラでのの XMLシリアル化の動作のようなノードは、次のとおりです。

http://img31.imageshack.us/img31 /740/xmlserializerbehavior.pngする

Microsoft.VisualStudio.Modeling.Sdk.DslDefinition.dllアセンブリ内XmlSerializationDefinitionSerializerクラスに反射板を使用してを通して、私はそれがDomainClassの単なる派生物だということを発見しましたので、それについての特別な(明らかに)何もありません。

私はノードとして機能することをDomainClassを定義し、そして右のそれは私がサブノードを追加することができます、私はそれが仕事をしたいだけの方法をクリックしてきた、私はちょうどその[削除]メニューの選択を取り除くことができません。

コンテキストメニュー項目図を削除http://img705.imageshack.us/img705/ 9033 / validators.pngする

私は私が考えることができる何かを試してみた...私はプライベートにプロパティのセッターを設定して、その周りを取得、私は与える以外には効果がありませんよう、1..1に多重度を設定しました「バリ」のノードが欠落している時にエラー...私はこの問題に対処するように見えるルートモデルとバリデータドメインクラスと、それらのどれもの間DomainClassためとDomainRelationshipのための両方のすべてのプロパティを見てきました。私はまた、DSLエクスプローラウィンドウで、エクスプローラの動作ノードにすべてのものを見てきました。私は完全に困惑しています。誰もがこれを行う方法を知っていますか?

役に立ちましたか?

解決

さて、広範な研究のかなりの後、私はこれを行う方法を見つけました。誰が将来的に私の質問への答えを必要とする場合にはここで、私がやったことです。あなたのDSLモデルのDesignerExplorer(それはModelExplorer.ttファイルで作成されたDslPackageプロジェクト、にあります)のための部分的なクラスを作成し、その中に以下のコードを置く必要があります:

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 );
        }
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top