Übersicht über den Behavior-Dienst

Der BehaviorService verwaltet die Benutzeroberfläche in einem Designer. Er stellt eine einheitliche Möglichkeit für die Bearbeitung von Benutzeroberflächenelementen (z. B. mausbezogene Ereignisse, Menübefehle und OLE-Drag & Drop-Vorgänge) zur Entwurfszeit bereit.

Verwalten der Benutzeroberfläche zur Entwurfszeit

Ein wichtiger Aspekt bei der Erstellung einer benutzerdefinierten Entwurfszeitumgebung ist die Verwaltung der Benutzeroberfläche. Durch das Erstellen eines benutzerdefinierten Designers stellen Sie eine Entwurfszeitumgebung für das benutzerdefinierte Steuerelement bereit.

Als Designerentwickler können Sie eigene Benutzeroberflächenebenen erstellen, die als Adorner bezeichnet werden. Auf der Oberfläche der einzelnen Ebenen erstellen Sie eigene Glyph-Typen für Zeichen-, Zieh- und andere auf der Benutzeroberfläche ausgeführte Operationen. Jedem Glyph kann ein Behavior-Typ zugeordnet sein. Ein Behavior ist eine Klasse, die über Überladungen sämtlicher Eingabefunktionen verfügt, einschließlich Menübefehle, Mausbewegungen und OLE-Drag & Drop-Vorgänge. Behavior-Objekte können auch unabhängig von einem Glyph-Objekt hinzugefügt werden, sodass sie mit den allgemeinen Eingabefunktionen für den gesamten Designer verknüpft werden können. Die drei oben erwähnten Features werden mit dem Behavior-Typ implementiert.

Tipp

Sie müssen einen Verweis auf die Entwurfszeitassembly System.Design.dll hinzufügen. Diese Assembly ist nicht in .NET Framework 4 Client Profile enthalten. Um einen Verweis auf System.Design.dll hinzuzufügen, müssen Sie das Zielframework des Projekts in .NET Framework 4 ändern.

In Version 1.1 von .NET Framework wurden einige Ereignisse (z. B. OnMouseDragBegin) durch die ControlDesigner-Klasse verfügbar gemacht. In diesem Modell wird ein großer Teil der Benutzeroberflächen-Designerlogik im EventHandler implementiert. Da ein Steuerelement über mehrere Bereiche verfügt, die für die Bearbeitung durch den Benutzer vorgesehen sind, war bei diesem Modell das Schreiben einer umfangreichen unterstützenden Logik erforderlich.

Der Behavior-Typ stellt die Lösung dieses Problems dar. Der BehaviorService umfasst zwei Bestandteile, die in der folgenden Tabelle aufgeführt und beschrieben werden.

Bestandteil

Beschreibung

Ein Stapel von Behavior-Klassen

Jede Klasse verfügt über Methoden, die mit Menübefehlen, OLE-Drag & Drop-Vorgängen, Mausereignissen usw. verknüpft sind. Die Klasse am Anfang des Stapels stellt das aktive Behavior dar, und alle Benutzereingaben werden an dieses Behavior weitergeleitet.

Adorner-Objekte und Glyph-Objekte

Ein Adorner ist eine nicht sichtbare Ebene zwischen der Entwurfsoberfläche und dem Benutzer. Ein Adorner kann Glyph-Objekte enthalten, bei denen es sich um kompakte gerenderte Objekte handelt. Ein Glyph kann vom Behavior-Dienst auf Treffer überprüft werden, und dieser kann optional ein Behavior-Objekt verfügbar machen, das solange das aktive Behavior darstellt, wie die Überprüfung des Glyph auf Treffer den Wert true zurückgibt.

Obwohl Windows Forms Designer weiterhin die ursprünglichen ControlDesigner-Überschreibungen für Ziehen und Mausbewegungen unterstützt, werden diese Aktionen als Behavior-Objekte implementiert. Die folgende Tabelle zeigt die Elemente im Designer für ein einfaches Steuerelement mit einer normalen Menge von Ziehpunkten.

Verhaltenselement

Beschreibung

Auswahladorner

Eine einzelne Adornmentebene behandelt alle Glyph-Objekte auf der Auswahloberfläche.

Textsymbol

Am oberen Rand des Steuerelements befindet sich ein vollständig transparenter Text-Glyph. Sein Verhalten behandelt die gesamte Mausinteraktion.

Ziehsymbol

Zieh-Glyph-Objekte zeichnen die Ziehpunktsymbole für das Steuerelement. Ihre Behavior-Objekte steuern die Ziehvorgänge.

Erweitern der Entwurfszeit-Benutzeroberfläche

Das BehaviorService-Modell ermöglicht das unkomplizierte Hinzufügen neuer Funktionen auf einer vorhandenen Designer-Benutzeroberfläche. Die neue Benutzeroberfläche bleibt unabhängig von anderen, zuvor definierten Glyph-Objekten und Behavior-Objekten. Auf die Smarttags in einigen Steuerelementen wird z. B. über ein Glyph in der rechten oberen Ecke des Steuerelements zugegriffen (Smarttag-Glyphe).

Der Smarttagcode erstellt eine eigene Adorner-Ebene und fügt dieser Ebene Glyph-Objekte hinzu. Dadurch bleiben die Smarttag-Glyph-Objekte von den Auswahl-Glyph-Objekten getrennt. Für das Hinzufügen eines neuen Adorner zu der Adorners-Auflistung ist lediglich ein einfacher Code erforderlich.

    behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
    designerActionAdorner = new Adorner();
    behaviorService.Adorners.Add(designerActionAdorner);
    Glyph dag = new DesignerActionGlyph(/*...*/);
    designerActionAdorner.Glyphs.Add(dag);

Symbole und Verhalten

Der Glyph-Typ ist einfach strukturiert. Wenn Sie komplexe Funktionen benötigen, fügen Sie ihn der Klasse hinzu, die Sie aus dem Glyph abgeleitet haben.

Glyph-Objekte können über Behavior-Objekte verfügen, dies ist jedoch nicht erforderlich. Ein Glyph ohne Behavior-Objekte verfügt über eine Behavior-Eigenschaft, die null zurückgibt.

Ein Behavior verfügt über eine Methode für jede unterstützte Benutzerinteraktion. Zum Beispiel verfügt die Behavior-Basisklasse über Methoden für die Unterstützung von Drag & Drop-Vorgängen, z. B. OnDragEnter und OnGiveFeedback.

Die meisten Methoden geben einen booleschen Wert zurück, der angibt, ob das Ereignis behandelt wurde. Ziehereignisse verfügen über einen Wert im DragEventArgs-Parameter. Einzelne Menüelemente können hinzugefügt oder entfernt werden, indem sie aus der FindCommand-Methode zurückgegeben werden. Die FindCommand-Methode gibt gemeinsam mit der DisableAllCommands-Eigenschaft an, wie die MenuCommand-Objekte mit dem Verhalten interagieren.

Adorner

Ein Adorner kann als Proxy zwischen benutzeroberflächenbezogenen Elementen (den Glyph-Objekten) und dem BehaviorService betrachtet werden.

Jeder Adorner kann aktiviert und deaktiviert werden. Nur aktivierte Adorner-Objekte erhalten Trefferüberprüfungs- und Zeichenmeldungen vom BehaviorService.

Wenn der BehaviorServiceAdornerCollection des BehaviorService ein Adorner hinzugefügt wird, legt die Auflistung die BehaviorService-Eigenschaft fest, damit der Adorner einen Rückruf zum BehaviorService ausführen kann.

Durch den Aufruf der Invalidate-Methode des Adorner-Objekts wird der zugeordnete BehaviorService gezwungen, das Adorner-Fenster zu aktualisieren.

Ablegen von Verhalten

Die einfachste Möglichkeit zum Ablegen von Behavior-Objekten auf dem Verhaltensstapel ist die Verwendung von Glyph-Objekten. Es gibt jedoch noch weitere Möglichkeiten. Glyph-Objekte können Behavior-Objekte selbstständig auf dem Verhaltensstapel ablegen und auch Sie selbst können Behavior-Objekte direkt auf dem Verhaltensstapel ablegen. Angenommen, Sie möchten einen Ziehpunkt über die Entwurfsoberfläche ziehen. Anstatt, dass Sie eine Logik schreiben, mit der der Ziehvorgang nachverfolgt wird, führt das Glyph die folgenden Aktionen entsprechend der Reihenfolge im Verhaltensstapel selbstständig aus:

  1. Dem Glyph ist ein Behavior zugeordnet, das auf eine MausDown-Bewegung reagiert.

  2. Wenn die Maustaste gedrückt wird, legt das Glyph ein neues Behavior auf dem Verhaltensstapel ab. Dieses Behavior behandelt MouseMove- und MouseUp-Ereignisse. Es kann ebenfalls sämtliche Menübefehle deaktivieren, sodass für die Dauer des Ziehvorgangs die Eingabe von Tastenkombinationen oder anderen Befehlen nicht möglich ist.

  3. Wenn die Maustaste losgelassen wird, schließt das Behavior die Bewegung ab und verlässt den Stapel. Dadurch wird automatisch das vorherige Behavior wiederhergestellt.

Tipp

Die BehaviorService-Architektur ist mit dem Windows Forms-Modell verknüpft und unterstützt daher keine anderen Anzeigetechnologien (z. B. Web Forms).

Siehe auch

Referenz

BehaviorService

Glyph

Adorner

EventHandler

Weitere Ressourcen

Erweitern der Entwurfszeitunterstützung