Udostępnij za pośrednictwem


Inicjowanie projektanta i konfiguracja metadanych

Manipulowanie metadanymi i atrybutami filtru skojarzonymi z projektantem lub składnikiem projektanta udostępnia mechanizm do definiowania narzędzi używanych przez określonego projektanta do obsługi różnych Type obiektów (takich jak struktury danych, klas lub jednostek graficznych), gdy projektant jest dostępny, oraz sposobu konfigurowania środowiska IDE programu Visual Studio do obsługi projektanta (na przykład dostępnej kategorii przybornika lub karty).

Zestaw Visual Studio SDK udostępnia kilka mechanizmów ułatwiających kontrolę inicjowania składnika projektanta lub projektanta oraz manipulowanie jego metadanymi przez pakiet VSPackage.

Inicjowanie metadanych i informacji o konfiguracji

Ponieważ są ładowane na żądanie, pakiety VSPackage mogą nie zostać załadowane przez środowisko programu Visual Studio przed utworzeniem wystąpienia projektanta. W związku z tym pakiety VSPackage nie mogą używać standardowego mechanizmu konfigurowania projektanta lub składnika projektanta podczas tworzenia, który ma obsługiwać DesignerCreated zdarzenie. Zamiast tego pakiet VSPackage implementuje wystąpienie interfejsu DesignSurfaceExtension i rejestruje się w celu zapewnienia dostosowań, nazywanych rozszerzeniami powierzchni projektowej.

Dostosowywanie inicjowania

Dostosowywanie projektanta, składnika lub powierzchni projektanta obejmuje:

  1. Modyfikowanie metadanych projektanta i efektywne zmienianie sposobu uzyskiwania dostępu do określonego Type lub konwertowania.

    Zazwyczaj odbywa się to za pomocą UITypeEditor mechanizmów lub TypeConverter .

    Na przykład po System.Windows.Formszainicjowaniu projektantów opartych na programie Visual Studio środowisko programu Visual Studio modyfikuje Image UITypeEditor obiekty używane z projektantem do uzyskiwania map bitowych zamiast systemu plików za pomocą menedżera zasobów.

  2. Integracja ze środowiskiem, na przykład przez subskrybowanie zdarzeń lub uzyskiwanie informacji o konfiguracji projektu. Informacje o konfiguracji projektu i subskrybowanie zdarzeń można uzyskać, uzyskując ITypeResolutionService interfejs.

  3. Modyfikowanie środowiska użytkownika przez aktywowanie odpowiednich kategorii przybornika lub ograniczenie stosowania projektanta przez zastosowanie wystąpienia ToolboxItemFilterAttribute klasy do projektanta.

Inicjowanie projektanta przez pakiet VSPackage

Pakiet VSPackage powinien obsługiwać inicjowanie projektanta przez:

  1. Tworzenie obiektu implementując klasę DesignSurfaceExtension .

    Uwaga

    Klasa DesignSurfaceExtension nigdy nie powinna być implementowana w tym samym obiekcie co Package klasa.

  2. Rejestrowanie klasy, która implementuje DesignSurfaceExtension jako obsługę rozszerzeń projektanta programu VSPackage. Zarejestruj klasę, stosując wystąpienia DesignSurfaceExtensionAttributeklasy , ProvideObjectAttributei ProvideServiceAttribute do klasy, która zapewnia implementację pakietu VSPackage klasy Package.

Za każdym razem, gdy zostanie utworzony składnik projektanta lub projektanta, środowisko programu Visual Studio:

  • Uzyskuje dostęp do każdego zarejestrowanego dostawcy rozszerzenia powierzchni projektowej.

  • Tworzy wystąpienie obiektu dostawcy DesignSurfaceExtension rozszerzenia powierzchni projektowej i inicjuje je.

  • Wywołuje metodę lub OnComponentCreated metodę dostawcy OnDesignerCreated rozszerzenia powierzchni projektowej (odpowiednio).

Podczas implementowania DesignSurfaceExtension obiektu jako elementu członkowskiego pakietu VSPackage ważne jest, aby zrozumieć, że:

  • Środowisko programu Visual Studio nie zapewnia żadnej kontroli nad tym, jakie metadane lub inne ustawienia konfiguracji modyfikuje określony DesignSurfaceExtension dostawca. Istnieje możliwość, że co najmniej DesignSurfaceExtension dwóch dostawców modyfikujących tę samą funkcję projektanta w sposób powodujący konflikt, a ostateczna modyfikacja jest ostateczna. Nie jest określana, która modyfikacja jest ostatnio stosowana.

  • Istnieje możliwość jawnego ograniczenia implementacji DesignSurfaceExtension obiektu do określonych projektantów przez zastosowanie wystąpień ToolboxItemFilterAttribute do tej implementacji. Aby uzyskać więcej informacji na temat filtrowania elementów przybornika , zobacz i ToolboxItemFilterAttribute ToolboxItemFilterType.

Dodatkowa aprowizacja metadanych

Pakiet VSPackage może zmienić konfigurację składnika projektanta lub projektanta innego niż w czasie projektowania.

Klasa ProvideDesignerMetadataAttribute może być używana programowo lub stosowana do pakietu VSPackage, który udostępnia projektanta.

Wystąpienie ProvideDesignerMetadataAttribute klasy służy do modyfikowania metadanych składników utworzonych na powierzchni projektowej. Można na przykład zastąpić domyślną przeglądarkę właściwości używaną przez CommonDialog obiekty przeglądarką właściwości niestandardowych.

Modyfikacje udostępniane przez wystąpienie ProvideDesignerMetadataAttribute zastosowane do implementacji Package pakietu VSPackage mogą mieć jeden z dwóch zakresów:

  • Globalne — dla wszystkich nowych wystąpień danego składnika

  • Lokalne — odnoszące się tylko do wystąpienia składnika utworzonego na powierzchni projektowej dostarczonej przez bieżący pakiet VSPackage.

Właściwość IsGlobal ProvideDesignerMetadataAttribute wystąpienia zastosowanego do implementacji Package pakietu VSPackage określa ten zakres.

Zastosowanie atrybutu do implementacji Package z IsGlobal właściwością obiektu ustawionego ProvideDesignerMetadataAttribute na true, jak pokazano poniżej, zmienia przeglądarkę dla całego środowiska programu Visual Studio:

[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=true )]

internal class MyPackage : Package {}

Jeśli flaga globalna została ustawiona na falsewartość , zmiana metadanych jest lokalna dla bieżącego projektanta obsługiwanego przez bieżący pakiet VSPackage:

[ProvideDesignerMetadata(typeof(Color), typeof(CustomBrowser), IsGlobal=false )]

internal class MyPackage : Package {}

Uwaga

Powierzchnia projektowa obsługuje tylko tworzenie składników i dlatego tylko składniki mogą mieć metadane lokalne. W powyższym przykładzie podjęto próbę zmodyfikowania właściwości, takiej jak Color właściwość obiektu. Jeśli false element został przekazany dla flagi globalnej, nigdy nie pojawi się, CustomBrowser ponieważ projektant nigdy nie tworzy wystąpienia klasy Color. Ustawienie flagi false globalnej na wartość jest przydatne w przypadku składników, takich jak kontrolki, czasomierze i okna dialogowe.