Dodawanie właściwości niestandardowych do diagramu warstwy
Podczas wpisywania kodu rozszerzenia schematów warstwy w Visual Studio Ultimate, można przechowywać wartości z dowolnego elementu na diagramie warstwy.Wartości będą się utrzymywać, po zapisaniu i ponownym otwarciu diagramu.Można także korzystać z tych właściwości, które pojawiają się w oknie Właściwości tak, że użytkownicy mogą wyświetlić i edytować je.Na przykład można pozwolić użytkownikom na określenie wyrażenia regularnego dla każdej warstwy i napisanie kodu sprawdzania poprawności, aby sprawdzić zgodność nazw klas w każdej warstwie z szablonem określonym przez użytkownika.
Właściwości nie są widoczne dla użytkownika
Jeśli chcesz, aby Twój kod dołączył wartości dowolnego elementu w diagramie warstwy, nie musisz zdefiniować składnik MEF.Jest słownik o nazwie Properties w ILayerElement.Po prostu dodaj zorganizowane wartości do słownika dowolnego elementu warstwy.Zostaną zapisane jako części diagramu warstwy.Aby uzyskać więcej informacji, zobacz Nawigowanie i aktualizowanie modeli warstw w kodzie programu.
Właściwości, które użytkownik może edytować
Wstępne przygotowania
![]() |
---|
Aby sprawić, żeby wyświetliły się właściwości, należy wprowadzić następującą zmianę na każdym komputerze, na którym właściwości warstwy mają być widoczne.
|
Upewnij się, że kod jest w projekcie VSIX
Jeśli Twoja własność jest częścią polecenia, gestu lub projektem sprawdzania poprawności, nie trzeba nic dodawać.W projekcie programu Visual Studio Extensibility kod dla właściwości niestandardowej powinien być zdefiniowany jako składnik MEF.Aby uzyskać więcej informacji, zobacz Dodawanie poleceń i gestów do diagramów warstw lub Dodawanie walidacji niestandardowej architektury do diagramów warstw.
Zdefiniuj właściwości niestandardowe
Aby utworzyć niestandardową właściwość, zdefiniuj klasę podobną do tej:
[Export(typeof(IPropertyExtension))]
public class MyProperty
: PropertyExtension<ILayerElement>
{
// Implement the interface.
}
Można zdefiniować właściwości na ILayerElement lub którejkolwiek z jej klas pochodnych, które obejmują:
ILayerModel — model
ILayer — każda warstwa
ILayerDependencyLink — łącza między warstwami
ILayerComment
ILayerCommentLink
Aby wyświetlić niestandardowe właściwości
![]() |
---|
Właściwości niestandardowe są wyświetlane tylko wtedy, gdy Eksplorator architektury jest otwarty przed rozpoczęciem ładowania projektu modelowania.Trzeba będzie otworzyć w Eksplorator architektury i następnie zatrzymać i ponownie uruchomić program Visual Studio, aby zobaczyć właściwości niestandardowe.W menu Architektura wybierz Okna, Eksplorator architektury. |
Aby przetestować działanie właściwości niestandardowej, naciśnij klawisz F5, aby uruchomić wystąpienie doświadczalne programu Visual Studio.Utwórz przykład odpowiedniego elementu warstwy i zaznacz go.Zobaczysz właściwości niestandardowe w oknie dialogowym właściwości.
Przykład
Następujący kod jest typową właściwością niestandardową deskryptora.Definiuje właściwość typu Boolean na modelu warstwy (ILayerModel), który umożliwia użytkownikowi podanie wartości dla niestandardowej metody walidacji.
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;
}
}
}
}