Controlar el color, el estilo de línea y otras propiedades de forma

Algunas propiedades de forma, como el color, pueden ser "expuestas". Es decir, las propiedades se pueden vincular a una propiedad de dominio de la forma. Otras se tienen que controlar directamente.

Exposición de una propiedad

Algunas propiedades de forma, como el color, se pueden vincular al valor de una propiedad de dominio.

En la definición de DSL, seleccione una forma, un conector o una clase de diagrama. En su menú contextual, elija Agregar expuesta y, a continuación, elija la propiedad que desee, como Color de relleno.

La forma ahora tiene una propiedad de dominio que puede establecer en código de programa o como usuario.

Actualización dinámica de una propiedad expuesta

Normalmente, prefiere que la propiedad expuesta dependa de otra propiedad. Por ejemplo, puede que prefiera que una forma cambie al color rojo siempre que una propiedad de dominio determinada sea menor que cero. Para crear esta dependencia, cree una regla. Por ejemplo:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.VisualStudio.Modeling;
using Microsoft.VisualStudio.Modeling.Diagrams;
namespace ExampleNamespace
{
 // Attribute associates the rule with class:
 [RuleOn(typeof(CarShape), FireTime = TimeToFire.TopLevelCommit)]
 // The rule is a class derived from one of the abstract rules:
 class CarShapeAddRule : AddRule
 {
 // Override the abstract method:
 public override void ElementAdded(ElementAddedEventArgs e)
 {
 base.ElementAdded(e);
 CarShape shape = e.ModelElement as CarShape;
 Store store = shape.Store;
 // Ignore this call if we're currently loading a model:
 if (store.TransactionManager.CurrentTransaction.IsSerializing)
  return;
 Car car = shape.ModelElement as Car;
 // Code here propagates change as required - for example:
 shape.FillColor = car.Somebool ? System.Drawing.Color.Red : System.Drawing.Color.Green;
 }
}
 // The rule must be registered:
 public partial class ExampleDomainModel
 {
 protected override Type[] GetCustomDomainModelTypes()
 {
  List<Type> types = new List<Type>(base.GetCustomDomainModelTypes());
  types.Add(typeof(CarShapeAddRule));
  // If you add more rules, list them here.
  return types.ToArray();
 }
 }
}