DSLエクスプローラでパーマネント・ノード
-
19-09-2019 - |
質問
私のカスタム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 );
}
}
}