Freigeben über


Hinzufügen von benutzerdefinierten Eigenschaften zu einem Ebenendiagramm

Mit diesem Visual Studio 2010 Feature Pack können Sie benutzerdefinierte Eigenschaften für Elemente in Ebenendiagrammen in Visual Studio 2010 Ultimate definieren. Sie können festlegen, dass diese Eigenschaften im Fenster Eigenschaften aufgeführt werden, sodass sie von Benutzern angezeigt und bearbeitet werden können. Weitere Informationen finden Sie unter Visual Studio Feature Packs.

Ebenenelemente (ILayerElement) verfügen über mehrere Standardeigenschaften, wie z. B. Name und Description. Diese Eigenschaften können vom Benutzer im Fenster Eigenschaften bearbeitet werden, und sie können auch vom Programmcode gelesen und aktualisiert werden.

Sie können eigene Eigenschaften definieren, die jedem Ebenenelement zugeordnet werden können. Die einfachste Möglichkeit hierzu ist, dem Properties-Wörterbuch, das an jeden ILayerElement angefügt wird, Werte hinzuzufügen. Das kann genügen, wenn Sie nur die Eigenschaften in einem eigenen Programmcode verwenden möchten.

Wenn Sie jedoch eine benutzerdefinierte Eigenschaft definieren, können Sie für den Benutzer einen weiteren Wert im Fenster Eigenschaften sichtbar machen. Ein benutzerdefinierter Eigenschaftendeskriptor ist eine Klasse, die von PropertyExtension<T> erbt. T ist hierbei ILayerElement oder eine seiner abgeleiteten Klassen. T ist der Typ, für den die Eigenschaft definiert wird.

Sie können z. B. Eigenschaften für die folgenden Typen definieren:

  • ILayerModel - das Modell

  • ILayer - jede Ebene

  • ILayerDependencyLink - die Links zwischen Ebenen

  • ILayerComment

  • ILayerCommentLink

Tipp

Es gibt auch einen einfacheren Mechanismus zum Speichern von Zeichenfolgen mit einem beliebigen ILayerElement. Sie können Werte im Properties-Wörterbuch ablegen, das an die einzelnen Elemente angefügt wird. Das ist für Daten nützlich, bei denen Sie keine direkte Bearbeitung durch den Benutzer wünschen. Weitere Informationen finden Sie unter Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.

Beispiel

Der folgende Code entspricht einem typischen benutzerdefinierten Eigenschaftendeskriptor. Er definiert eine boolesche Eigenschaft für das Ebenenmodell (ILayerModel), mit dem der Benutzer Werte für eine benutzerdefinierte Validierungsmethode bereitstellen kann.

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

Siehe auch

Weitere Ressourcen

Erstellen von Erweiterungen für Ebenendiagramme