Поделиться через


Добавление пользовательских свойств в схемы слоев

Данный пакет дополнительных компонентов Visual Studio 2010 позволяет определять пользовательские свойства элементов на схемах слоев в Visual Studio 2010 Ultimate. Эти свойства могут отображаться в окне Свойства, чтобы пользователи могли просматривать и редактировать их. Дополнительные сведения см. в разделе Пакеты функций Visual Studio.

Элементы слоя (ILayerElement) имеют несколько стандартных свойств, таких как Name и Description. Эти свойства могут редактироваться пользователем в окне Свойства, а также считываться и обновляться в программном коде.

Можно определить собственные свойства и связать их с любым элементом слоя. Проще всего это сделать, добавив значения в словарь Properties, который прикрепляется к каждому элементу ILayerElement. Этого достаточно, если свойства требуется использовать только в собственном программном коде.

Однако после определения пользовательского свойства в окне Свойства пользователю отображается дополнительное значение. Дескриптор пользовательского свойства — это класс, наследующий от PropertyExtension<T>, где T — это ILayerElement или один из его производных классов. T — это тип, для которого определено свойство.

Например, можно определить свойства следующих типов:

  • ILayerModel — модель

  • ILayer — каждый слой

  • ILayerDependencyLink — ссылки между слоями

  • ILayerComment

  • ILayerCommentLink

Примечание

Существует и более простой механизм сохранения строк с любым элементом ILayerElement.Можно разместить значения в словаре Properties, который прикрепляется к каждому элементу.Такой подход полезно применять в работе с данными, которые не должны редактироваться пользователем напрямую.Дополнительные сведения см. в разделе Перемещение по моделям слоев в коде программы и их обновление.

Пример

Следующий код является типичным дескриптором пользовательских свойств. Он определяет логическое свойство в модели слоев (ILayerModel), которое позволяет пользователю предоставлять значения для пользовательского метода проверки.

using System;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Layer;

namespace MyNamespace
{
  /// <summary>
  /// Custom properties are added to the Layer Designer via a custom
  /// Property Descriptor. We have to export this Property Descriptor
  /// using MEF to make it available in the Layer Designer.
  /// </summary>
  [Export(typeof(IPropertyExtension))]
  public class AllTypesMustBeReferencedProperty 
      : PropertyExtension<ILayerModel>
  {
    /// <summary>
    /// Each custom property must have a unique name. 
    /// Usually we use the full name of this class.
    /// </summary>
    public static readonly string FullName =
      typeof(AllTypesMustBeReferencedProperty).FullName;

    /// <summary>
    /// Construct the property. Notice the use of FullName.
    /// </summary>
    public AllTypesMustBeReferencedProperty()
            : base(FullName)
    {  }

    /// <summary>
    /// The display name is shown in the Properties window.
    /// We therefore use a localizable resource.
    /// </summary>
    public override string DisplayName
    {
      get { return Strings.AllTypesMustBeReferencedDisplayName; }
    }

    /// <summary>
    /// Description shown at the bottom of the Properties window.
    /// We use a resource string for easier localization.
    /// </summary>
    public override string Description
    {
      get { return Strings.AllTypesMustBeReferencedDescription; }
    }

    /// <summary>
    /// This is called to set a new value for this property. We must
    /// throw an exception if the value is invalid.
    /// </summary>
    /// <param name="component">The target ILayerElement</param>
    /// <param name="value">The new value</param>
    public override void SetValue(object component, object value)
    {
      ValidateValue(value);
      base.SetValue(component, value);
    }
    /// <summary>
    /// Helper to validate the value.
    /// </summary>
    /// <param name="value">The value to validate</param>
    private static void ValidateValue(object value)
    {  }

    public override Type PropertyType
    { get { return typeof(bool); } }

    /// <summary>
    /// The segment label of the properties window.
    /// </summary>
    public override string Category
    { 
      get
      {
        return Strings.AllTypesMustBeReferencedCategory;
      }
    }
  }
}

См. также

Другие ресурсы

Создание расширений для схем слоев