Hinzufügen von benutzerdefinierten Eigenschaften zu einem Ebenendiagramm
Wenn Sie Erweiterungscode für Ebenendiagramme in Visual Studio Ultimate schreiben, können Sie Werte mit jedem Element in einem Ebenendiagramm speichern.Die Werte beibehalten, wenn das Diagramm gespeichert und erneut geöffnet wird.Sie können diese Eigenschaften im Fenster Eigenschaften werden auch angezeigt werden, sodass sie von Benutzern angezeigt und bearbeitet werden können.Beispielsweise können Sie Benutzer einen regulären Ausdruck für jede Ebene angeben werden und schreiben Validierungscode, um sicherzustellen, dass die Namen der Klassen in jeder Ebene das Muster entsprechen, das vom Benutzer angegeben wird.
Eigenschaften nicht den Benutzer sichtbar
Wenn Sie nur den Code Werte zu einem Element in einem Ebenendiagramm anfügen möchten, müssen Sie nicht, um eine MEF-Komponente zu definieren.Es gibt ein Wörterbuch, das Properties in ILayerElement genannt wird.Fügen Sie nur marshalable Werte dem Wörterbuch eines beliebigen Ebenenelements hinzu.Sie werden als Teil des Ebenendiagramms gespeichert.Weitere Informationen finden Sie unter Navigieren in und Aktualisieren von Ebenenmodellen im Programmcode.
Eigenschaften, die der Benutzer bearbeiten kann
Ursprüngliche Vorbereitung
![]() |
---|
Um Eigenschaften angezeigt werden, müssen Sie die folgende Änderung auf jedem Computer vornehmen in dem Ebeneneigenschaften sichtbar sein.
|
Stellen Sie sicher, dass der Code in einem VSIX-Projekt ist
Wenn die Eigenschaft ein Teil eines Befehls, Gesten oder des Validierungsprojekts ist, müssen Sie, um nichts hinzuzufügen.Der Code für die benutzerdefinierte Eigenschaft sollte in einem Visual Studio-Erweiterbarkeitsprojekt definiert werden, das als MEF-Komponente definiert ist.Weitere Informationen finden Sie unter Hinzufügen von Befehlen und Bewegungen zu Ebenendiagrammen oder unter Hinzufügen einer benutzerdefinierten Architekturüberprüfung zu Ebenendiagrammen.
Definieren Sie die benutzerdefinierte Eigenschaft
Um eine benutzerdefinierte Eigenschaft zu erstellen, definieren Sie eine Klasse als:
[Export(typeof(IPropertyExtension))]
public class MyProperty
: PropertyExtension<ILayerElement>
{
// Implement the interface.
}
Sie können Eigenschaften für ILayerElement oder einem ihrer abgeleiteten Klassen definieren, die Folgendes umfassen:
ILayerModel - das Modell
ILayer - jede Ebene
ILayerDependencyLink - die Links zwischen Ebenen
ILayerComment
ILayerCommentLink
Um die benutzerdefinierten Eigenschaften finden
![]() |
---|
Benutzerdefinierte Eigenschaften werden nur angezeigt, wenn der Architektur-Explorer geöffnet ist, bevor Sie das Modellierungsprojekt laden.Sie können müssen Sie den Architektur-Explorer und anschließend Visual Studio zu beenden und neu starten, um benutzerdefinierte Eigenschaften anzuzeigen.Klicken Sie im Menü Architektur wählen Sie Fenster, Architektur-Explorer aus. |
Um die benutzerdefinierten Eigenschaften zu testen, drücken Sie F5 um eine experimentelle Instanz von Visual Studio beginnen.Erstellen Sie ein Beispiel des entsprechenden Ebenenelements, und wählen Sie es aus.Sie finden die benutzerdefinierte Eigenschaft im Eigenschaftenfenster.
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;
}
}
}
}