Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Некоторые свойства фигуры, такие как цвет, можно "предоставить". То есть свойства могут быть связаны со свойством домена фигуры. Другие должны контролироваться напрямую.
Предоставление свойства
Некоторые свойства фигуры, такие как цвет, могут быть связаны со значением свойства домена.
В определении DSL выберите фигуру, соединитель или класс диаграммы. В меню правой кнопкой мыши выберите пункт "Добавить предоставлено", а затем выберите нужное свойство, например цвет заливки.
Теперь фигура имеет свойство домена, которое можно задать в коде программы или в качестве пользователя.
Динамическое обновление предоставленного свойства
Как правило, необходимо сделать доступное свойство зависимым от другого свойства. Например, может потребоваться, чтобы фигура была красной, если определенное свойство домена меньше нуля. Чтобы сделать эту зависимость, создайте правило. Например:
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();
}
}
}