Bereitstellen von Rückgängig-Unterstützung für Designer
Designer wie Editoren müssen in der Regel Rückgängig-Vorgänge unterstützen, damit Benutzer ihre letzten Änderungen beim Ändern eines Codeelements rückgängig machen können.
Die meisten in Visual Studio implementierten Designer verfügen automatisch über "Rückgängig"-Unterstützung, die von der Umgebung bereitgestellt wird.
Designerimplementierungen, die Unterstützung für das Rückgängig-Feature bereitstellen müssen:
Bereitstellen der Rückgängig-Verwaltung durch Implementieren der abstrakten Basisklasse UndoEngine
Bereitstellen von Persistenz und CodeDOM-Unterstützung durch Implementieren der IDesignerSerializationService Klassen.IComponentChangeService
Weitere Informationen zum Schreiben von Designern mit .NET Framework finden Sie unter Erweitern der Entwurfszeitunterstützung.
Das Visual Studio SDK bietet eine Standardmäßige Rückgängig-Infrastruktur durch:
Bereitstellen von Rückgängig-Verwaltungsimplementierungen über die OleUndoEngine Und-Klassen OleUndoEngine.UndoUnit .
Bereitstellen von Persistenz und CodeDOM-Unterstützung über die Standard CodeDomComponentSerializationService - und IComponentChangeService Implementierungen.
Automatisches Abrufen des Rückgängig-Supports
Jeder in Visual Studio erstellte Designer unterstützt automatisch und vollständig rückgängig, wenn der Designer:
Verwendet eine Control basierte Klasse für die Benutzeroberfläche.
Verwendet standardmäßiges CodeDOM-basiertes Codegenerierungs- und Analysesystem für die Codegenerierung und Persistenz.
Weitere Informationen zum Arbeiten mit der Visual Studio CodeDOM-Unterstützung finden Sie unter Dynamische Quellcodegenerierung und Kompilierung.
Verwendung der expliziten Designer-Rückgängig-Unterstützung
Designer müssen ihre eigene Rückgängig-Verwaltung bereitstellen, wenn sie eine grafische Benutzeroberfläche verwenden, die als Ansichtsadapter bezeichnet wird, außer dem von ihnen bereitgestellten Control.
Ein Beispiel hierfür könnte das Erstellen eines Produkts mit einer webbasierten grafischen Entwurfsschnittstelle anstelle einer .NET Framework-basierten grafischen Schnittstelle sein.
In solchen Fällen müsste man diesen Ansichtsadapter mit Visual Studio registrieren ProvideViewAdapterAttributeund eine explizite Rückgängig-Verwaltung bereitstellen.
Designer müssen CodeDOM- und Persistenzunterstützung bereitstellen, wenn sie das visual Studio-Codegenerierungsmodell nicht im System.CodeDom Namensraum verwenden.
Rückgängigmachen der Supportfeatures des Designers
Das Environment SDK bietet Standardimplementierungen von Schnittstellen, die erforderlich sind, um Rückgängig-Unterstützung bereitzustellen, die von Designern verwendet werden können, die keine Control basierten Klassen für ihre Benutzeroberflächen oder das standardmäßige CodeDOM- und Persistenzmodell verwenden können.
Die OleUndoEngine Klasse wird von der .NET Framework-Klasse UndoEngine abgeleitet, indem eine Implementierung der IOleUndoManager Klasse zum Verwalten von Rückgängig-Vorgängen verwendet wird.
Visual Studio stellt das folgende Feature zum Rückgängigmachen des Designers bereit:
Verknüpfte Rückgängig-Funktionen in mehreren Designern.
Kindereinheiten innerhalb eines Designers können mit ihren Eltern interagieren, indem sie implementieren IOleUndoUnit und IOleParentUndoUnit aktivieren OleUndoEngine.UndoUnit.
Das Environment SDK bietet CodeDOM- und Persistenzunterstützung, indem Folgendes bereitgestellt wird:
CodeDomComponentSerializationService als Umsetzung der IDesignerSerializationService
Ein IComponentChangeService vom Visual Studio-Designhost bereitgestelltes Element.
Verwenden der Umgebungs-SDK-Features zum Bereitstellen der Rückgängig-Unterstützung
Zum Abrufen der Rückgängig-Unterstützung muss ein Objekt, das einen Designer implementiert, eine Instanz der OleUndoEngine Klasse mit einer gültigen IServiceProvider Implementierung instanziieren und initialisieren. Diese IServiceProvider Klasse muss die folgenden Dienste bereitstellen:
-
Designer, die Visual Studio CodeDOM Serialisierung verwenden CodeDomComponentSerializationService , können sich für die Verwendung mit dem Visual Studio SDK als Implementierung des IDesignerSerializationServiceVisual Studio-SDKs entscheiden.
In diesem Fall sollte die IServiceProvider dem Konstruktor bereitgestellte OleUndoEngine Klasse dieses Objekt als Implementierung der IDesignerSerializationService Klasse zurückgeben.
-
Designer, die den vom Visual Studio-Entwurfshost bereitgestellten Standard DesignSurface verwenden, verfügen garantiert über eine Standardimplementierung der IComponentChangeService Klasse.
Designer, die einen OleUndoEngine basierten Rückgängig-Mechanismus implementieren, verfolgt Änderungen automatisch, wenn:
Eigenschaftenänderungen werden über das TypeDescriptor Objekt vorgenommen.
IComponentChangeService Ereignisse werden manuell generiert, wenn eine rückgängig gemachte Änderung übernommen wird.
Die Änderung des Designers wurde im Kontext eines DesignerTransaction.
Der Designer wählt das explizite Erstellen von Rückgängig-Einheiten mithilfe der Standard-Rückgängig-Komponente, die von einer Implementierung UndoEngine.UndoUnit oder der Visual Studio-spezifischen Implementierung OleUndoEngine.UndoUnitbereitgestellt wird, die von UndoEngine.UndoUnit beiden abgeleitet wird und auch eine Implementierung von beiden IOleUndoUnit und IOleParentUndoUnitbietet.