AddRule Class
 

Represents a rule that is called when an object is added to the model.

Namespace:   Microsoft.VisualStudio.Modeling
Assembly:  Microsoft.VisualStudio.Modeling.Sdk.12.0 (in Microsoft.VisualStudio.Modeling.Sdk.12.0.dll)


public abstract class AddRule : Rule
public ref class AddRule abstract : Rule
[<AbstractClass>]
type AddRule = 
    class
        inherit Rule
    end
Public MustInherit Class AddRule
	Inherits Rule
NameDescription
System_CAPS_protmethod AddRule

Initializes an instance of the AddRule class.

NameDescription
System_CAPS_pubproperty

true if this rule will be executed before the change occurs.(Inherited from Rule.)

System_CAPS_pubproperty

true if this rule will execute immediately the change occurs.(Inherited from Rule.)

System_CAPS_pubproperty

true if this rule will execute when the current transaction commits.(Inherited from Rule.)

System_CAPS_pubproperty

true if this rule will execute when the top level transaction commits.(Inherited from Rule.)

System_CAPS_pubproperty

Gets or sets when the rule should execute. Normally set by the RuleOn attribute.(Inherited from Rule.)

System_CAPS_pubproperty

Gets or sets whether the rule is enabled. Normally true by default, but you can initialize it to false in the RuleOn attribute.(Inherited from Rule.)

System_CAPS_pubproperty

Gets the priority that is assigned to the rule. Helps to determine the order in which rules are executed at the end of a transaction.(Inherited from Rule.)

NameDescription
System_CAPS_pubmethod CompareTo

Compares the rule to another object.(Inherited from Rule.)

System_CAPS_pubmethod CompareTo

Compares the rule to another rule by their IDs.(Inherited from Rule.)

System_CAPS_pubmethod ElementAdded

Alerts listeners that a rule has been used.

System_CAPS_pubmethod Equals

Verifies whether the rule is equal to another object.(Inherited from Rule.)

System_CAPS_pubmethod Equals

Verifies whether a rule is equal to another rule.(Inherited from Rule.)

System_CAPS_protmethod Finalize

(Inherited from Object.)

System_CAPS_pubmethod GetHashCode

Gets the hash code for the rule.(Inherited from Rule.)

System_CAPS_pubmethod GetType

(Inherited from Object.)

System_CAPS_protmethod MemberwiseClone

(Inherited from Object.)

System_CAPS_pubmethod ToString

(Inherited from Object.)

Rules of this type are triggered when an element, relationship, shape, connector or diagram is added to the model.

A RuleOnAttribute attribute placed on the class indicates what type of object the Rule works on and when the rule should fire.

The rule is called when the object of the specified type is added to the model, whether it is added in the UI or programmatically.

The rule is also triggered when an element is loaded from file. If you want to avoid responding when this happens, include this code in your ElementAdded:

// Ignore this call if we're currently loading a model:
    if (e.ModelElement.Store.TransactionManager
          .CurrentTransaction.IsSerializing) 
       return;

For more information and examples, see Rules Propagate Changes Within the Model.

In the following example, A Rule is defined that derives from AddRule. This rule sets the position of a Shape when it is added to the diagram.

The RuleOn attribute indicates that the rule should fire when the top level transaction commits.

[RuleOn(typeof(ParentShapeContainsNestedChildShapes), FireTime = TimeToFire.TopLevelCommit)]
public class ShapeAddedToDiagramRule : AddRule
{
  private double offset = 0.25;
  private PointD location = new PointD(0.25, 0.25);

  public override void ElementAdded(ElementAddedEventArgs e)
  {
    Shape shape = null;
    ParentShapeContainsNestedChildShapes nestedLink = e.ModelElement as ParentShapeContainsNestedChildShapes;
    if (nestedLink != null)
    {
      shape = nestedLink.NestedChildShapes as Shape;
    }

    if (shape != null && shape.Diagram != null)
    {
      // Expand the shape and move it to its new position
      shape.IsExpanded = true;
      shape.Location = new PointD(location.X, location.Y + offset);

      // Adjust the height offset for the size of the shape
      // (I'm assuming that the DefaultContainerMargin
      // provides for a decent spacing between the shapes)
      offset += shape.Size.Height + shape.Diagram.DefaultContainerMargin.Height;
    }
  }
}

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Return to top