Controlar el color, el estilo de línea y otras propiedades de formaControlling Color, Line Style, and other Shape Properties

Algunas propiedades de forma como color puede 'expondrán': es decir, vinculada a una propiedad de dominio de la forma.Some shape properties such as color can be 'exposed' - that is, linked to a domain property of the shape. Otras personas deben controlarse directamente.Others have to be controlled directly.

Exponer una propiedadExposing a property

Algunas propiedades de forma como color se pueden vincular al valor de una propiedad de dominio.Some shape properties such as color can be linked to the value of a domain property.

En la definición DSL, seleccione una forma, conector o clase del diagrama.In the DSL Definition, select a shape, connector or diagram class. En el menú contextual, elija agregar exponey, a continuación, elija la propiedad que desee, como el Color de relleno.On its context menu, choose Add Exposed, and then choose the property you want, such as Fill Color.

La forma ahora tiene una propiedad de dominio que se puede establecer en el código de programa o como un usuario.The shape now has a domain property that you can set in program code or as a user.

Actualizar dinámicamente una propiedad expuestaDynamically updating an exposed property

Normalmente desea hacer que la propiedad expuesta dependa de otra propiedad.Typically you want to make the exposed property dependent on another property. Por ejemplo, conviene una forma de color rojo, siempre que una propiedad de dominio en particular es menor que cero.For example, you might want a shape to turn red whenever a particular domain property is less than zero. Para realizar esta dependencia, crearía una regla.To make this dependency, create a rule. Por ejemplo:For example:

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();
 }
 }
}