Vue d'ensemble du service de comportement
BehaviorService gère l'interface utilisateur dans un concepteur. Il fournit un moyen uniforme de manipuler des éléments d'interface utilisateur tels que les événements liés à la souris, les commandes de menu et les opérations glisser-déplacer OLE au moment du design.
Gestion de l'interface utilisateur au moment du design
La gestion de l'interface utilisateur constitue un aspect clé de la création d'une expérience personnalisée au moment du design. Vous fournissez une expérience au moment du design pour votre contrôle personnalisé en créant un concepteur personnalisé.
En tant que développeur concepteur, vous pouvez créer vos propres couches d'interface utilisateur, appelées ornements. Dans chaque surface de couche, vous créez vos propres types Glyph pour peindre, déplacer et effectuer d'autres opérations d'interface utilisateur. Chaque Glyph peut avoir un type Behavior associé. Un Behavior est une classe qui a des surcharges pour toutes les entrées d'utilisateur, notamment les commandes de menu, les déplacements de la souris et les opérations de glisser-déplacer OLE. Les objets Behavior peuvent également être ajoutés indépendamment d'un objet Glyph, afin qu'ils puissent être raccordés à l'entrée utilisateur générale pour l'intégralité du concepteur. Les trois fonctionnalités mentionnées précédemment sont implémentées avec le type Behavior.
Notes
Vous devez ajouter une référence à l'assembly au moment du design, System.Design.dll. Cet assembly n'est pas inclus dans le Framework 4 Client Profile. Pour ajouter une référence à System.Design.dll, vous devez remplacer le Framework cible du projet par .NET Framework 4.
Dans la version 1.1 du .NET Framework, certains événements, tels que OnMouseDragBegin, étaient exposés par la classe ControlDesigner. Dans ce modèle, une grande partie de la logique de concepteur d'interface utilisateur est implémentée dans le EventHandler. Étant donné que, sur un contrôle, il existe plusieurs zones désignées qu'un utilisateur peut manipuler, ce modèle requiert que vous écriviez une grande quantité de logique de prise en charge.
Le type Behavior répond à cette situation. BehaviorService se compose de deux parties. Le tableau suivant présente les parties avec leurs descriptions respectives.
Élément |
Description |
---|---|
Pile de classes Behavior |
Chaque classe dispose de méthodes relatives aux commandes de menu, aux opérations glisser-déplacer OLE, aux événements de souris, etc. La classe au sommet de la pile est le Behavior actif et chaque entrée d'utilisateur est acheminée vers ce Behavior. |
Un Adorner est une couche invisible entre l'aire de conception et l'utilisateur. Un Adorner peut contenir des objets Glyph qui sont des objets rendus et légers. Un Glyph peut faire l'objet d'un test d'atteinte par le service de comportement et il peut éventuellement exposer un objet Behavior qui devient le Behavior actif tant que le Glyph signale true depuis le test d'atteinte. |
Alors que le Concepteur Windows Forms continue à prendre en charge les substitutions ControlDesigner d'origine pour les opérations glisser et les déplacements de la souris, ces actions sont implémentées en tant qu'objets Behavior. Le tableau suivant présente les éléments du concepteur pour un contrôle simple qui dispose de l'ensemble commun des poignées de déplacement.
Élément de comportement |
Description |
---|---|
Ornement de sélection |
Une seule couche d'ornements gère tous les objets Glyph d'interface utilisateur de sélection. |
Glyphe de corps |
Un corps totalement transparent Glyph se trouve sur la partie supérieure du contrôle. Son comportement gère l'ensemble de l'interaction souris. |
Glyphe de manipulation |
Les objets Glyph de manipulation dessinent les poignées de manipulation pour le contrôle. Leurs objets Behavior contrôlent les opérations de glissement. |
Extension de l'interface utilisateur au moment du design
Le modèle BehaviorService permet à de nouvelles fonctionnalités d'être facilement positionnées sur une interface utilisateur de concepteur existante. La nouvelle interface utilisateur reste indépendante des autres objets Glyph et Behavior précédemment définis. Par exemple, un Glyph dans le coin supérieur droit du contrôle () accède aux balises actives de certains contrôles.
Le code de balise active crée sa propre couche Adorner et lui ajoute des objets Glyph. Ainsi, les objets Glyph de balise active restent séparés des objets Glyph de sélection. Le code nécessaire à l'ajout d'un nouveau Adorner à la collection Adorners est simple.
behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
designerActionAdorner = new Adorner();
behaviorService.Adorners.Add(designerActionAdorner);
Glyph dag = new DesignerActionGlyph(/*...*/);
designerActionAdorner.Glyphs.Add(dag);
Glyphes et comportements
Le type Glyph est simple. Si vous avez besoin de fonctionnalités complexes, ajoutez-les à votre propre classe dérivée du Glyph.
Les objets Glyph peuvent avoir des objets Behavior, mais ceux-ci ne sont pas requis. Un Glyph sans objets Behavior a une propriété Behavior qui retourne null.
Un Behavior a une méthode pour chaque interaction utilisateur prise en charge. Par exemple, la classe Behavior de base a des méthodes pour prendre en charge les opérations glisser-déplacer telles que OnDragEnter et OnGiveFeedback.
La plupart des méthodes retournent une valeur booléenne qui indique si l'événement a été géré. Les événements Glisser ont une valeur dans le paramètre DragEventArgs. Il est possible d'ajouter ou de supprimer des éléments de menu individuels en les retournant à partir de la méthode FindCommand. La méthode FindCommand fonctionne avec la propriété DisableAllCommands pour spécifier comment les objets MenuCommand interagissent avec le comportement.
Ornements
Un Adorner peut être considéré comme un proxy entre des éléments liés à l'interface utilisateur, qui se composent d'objets Glyph, et le BehaviorService.
Chaque Adorner peut être activé et désactivé. Seuls les objets Adorner activés recevront des messages relatifs au test d'atteinte et à la peinture du BehaviorService.
Lorsqu'un Adorner est ajouté à la BehaviorServiceAdornerCollection du BehaviorService, la collection définit la propriété BehaviorService afin que Adorner puisse rappeler le BehaviorService.
L'appel à la méthode Invalidate de l'objet Adorner oblige son BehaviorService associé à actualiser la fenêtre Adorner
Exécution d'un push des comportements
La façon la plus facile pour ajouter des objets Behavior à la pile de comportements consiste à utiliser des objets Glyph, mais ce n'est pas la seule façon. Les objets Glyph eux-mêmes peuvent pousser des objets Behavior sur la pile de comportements, et vous pouvez pousser également directement des objets Behavior sur la pile de comportements. Considérez le cas où vous souhaitez faire glisser une poignée de manipulation sur l'aire de conception. Plutôt que d'écrire vous-même une logique pour surveiller le moment où l'utilisateur effectue le glissement, le Glyph exécute lui-même les actions suivantes dans l'ordre de la pile de comportement.
Le Glyph dispose d'un Behavior associé qui répond à un déplacement de la souris vers le bas.
Lorsque l'utilisateur clique sur le bouton de la souris, le Glyph exécute un push d'un nouveau Behavior sur la pile de comportement. Ce Behavior gère les événements de déplacement de la souris et de déplacement de la souris vers le haut. Il peut également désactiver toutes les commandes de menu afin que les raccourcis clavier ou les autres commandes ne fonctionnent pas pendant la durée du glissement.
Lorsque l'utilisateur relâche le bouton de la souris, le Behavior termine le déplacement et disparaît de la pile de comportement. Cette opération restaure automatiquement le Behavior précédent.
Notes
L'architecture BehaviorService est liée au modèle Windows Forms et ne prend donc pas en charge d'autres technologies d'affichage comme Web Forms.