Información general sobre servicios de comportamiento
BehaviorService administra la interfaz de usuario en un diseñador. Proporciona una manera uniforme de manipular en tiempo de diseño elementos de la interfaz de usuario como, por ejemplo, eventos relacionados con el mouse, comandos de menú y operaciones de arrastrar y colocar de OLE.
Administrar la interfaz de usuario en tiempo de diseño
La administración de la interfaz de usuario es un aspecto clave a la hora de crear una experiencia personalizada en tiempo de diseño. Puede ofrecer una experiencia en tiempo de diseño para el control personalizado creando un diseñador personalizado.
Como desarrollador diseñador, puede crear sus propias capas de interfaz de usuario, denominadas adornos. Dentro de la superficie de cada capa, puede crear sus propios tipos Glyph para pintar, arrastrar y otras operaciones de la interfaz de usuario. Cada Glyph puede tener un tipo Behavior asociado. Behavior es una clase con sobrecargas para cualquier información introducida por el usuario, incluidos los comandos de menú, los movimientos del mouse y las operaciones de arrastrar y colocar de OLE. También se pueden agregar objetos Behavior independientemente de un objeto Glyph, de manera que se puedan enlazar con la información proporcionada por el usuario para todo el diseñador. Las tres características recién mencionadas se implementan con el tipo Behavior.
Nota
Debe agregar una referencia al ensamblado en tiempo de diseño, System.Design.dll.Este ensamblado no está incluido en .NET Framework 4 Client Profile.Para agregar una referencia a System.Design.dll, debe cambiar la versión de .NET Framework de destino del proyecto a .NET Framework 4.
En la versión 1.1 de .NET Framework, la clase ControlDesigner expuso algunos eventos, como OnMouseDragBegin. En este modelo, gran parte de la lógica del diseñador de la interfaz de usuario se implementa en EventHandler. Dado que hay varias áreas designadas en el control que puede manipular el usuario, este modelo exigía la escritura de una gran cantidad de lógica de soporte.
El tipo Behavior trata sobre esta situación. BehaviorService está compuesto de dos partes. En la tabla siguiente se muestran las partes y su descripción.
Parte |
Descripción |
---|---|
Pila de clases Behavior |
Cada clase tiene métodos relacionados con comandos de menú, operaciones de arrastrar y colocar de OLE, eventos del mouse, etc. La clase en lo más alto de la pila es el objeto Behavior activo y todos los datos proporcionados por el usuario se enrutan a dicho objeto Behavior. |
Adorner es una capa invisible entre la superficie de diseño y el usuario. Adorner puede contener objetos Glyph, que son objetos representados ligeros. Los servicios de comportamiento pueden comprobar las visitas de Glyph, y éste puede, opcionalmente, exponer un objeto Behavior que se convertirá en el objeto Behavior activo siempre que Glyph devuelva true en su comprobación de visitas. |
Si bien el Diseñador de Windows Forms sigue siendo compatible con los reemplazos de ControlDesigner originales para operaciones de arrastre y movimientos del mouse, estas acciones se implementan como objetos Behavior. En la tabla siguiente se muestran los elementos del diseñador para un control sencillo que tiene el conjunto habitual de cuadros de arrastre.
Elemento de comportamiento |
Descripción |
---|---|
Adorno de selección |
Una única capa de adorno controla todos los objetos Glyph de la interfaz de usuario de la selección. |
Glifo de cuerpo |
En la parte superior del control se encuentra un objeto Glyph de cuerpo completamente transparente. Su comportamiento controla toda la interacción con el mouse. |
Glifo de tirador |
Los objetos Glyph de tirador dibujan los identificadores de los que se puede tirar en el control. Sus objetos Behavior controlan las operaciones de arrastre. |
Extender la interfaz de usuario en tiempo de diseño
El modelo BehaviorService permite que las nuevas funcionalidades sean fácilmente dispuestas en capas en la interfaz de usuario del diseñador existente. Toda nueva interfaz de usuario permanece independiente de otros objetos Glyph y Behavior previamente definidos. Por ejemplo, el objeto Glyph situado en la esquina superior derecha del control tiene acceso a las etiquetas inteligentes de algunos controles ().
El código de etiquetas inteligentes crea su propia capa Adorner y agrega objetos Glyph a dicha capa. Esto mantiene los objetos Glyph de la etiqueta inteligente separados de los objetos Glyph de la selección. El código necesario para agregar un nuevo objeto Adorner a la colección Adorners no presenta complicación alguna.
behaviorService = (BehaviorService)serviceProvider.GetService(typeof(BehaviorService));
designerActionAdorner = new Adorner();
behaviorService.Adorners.Add(designerActionAdorner);
Glyph dag = new DesignerActionGlyph(/*...*/);
designerActionAdorner.Glyphs.Add(dag);
Glifos y comportamientos
El tipo Glyph es sencillo. Si necesita funcionalidad compleja, agréguelo a una clase derivada de Glyph.
Los objetos Glyph pueden tener objetos Behavior; pero no es imprescindible. Un objeto Glyph sin objetos Behavior tiene una propiedad Behavior que devuelve null.
Behavior tiene un método para cada interacción del usuario que sea compatible. Por ejemplo, la clase Behavior base tiene métodos para operaciones de arrastrar y colocar compatibles, como OnDragEnter y OnGiveFeedback.
La mayoría de los métodos devuelven un valor booleano que indica si se controló el evento. Los eventos de arrastre tienen un valor en el parámetro DragEventArgs. Se pueden agregar o quitar elementos de menú individuales devolviéndolos desde el método FindCommand. El método FindCommand funciona junto con la propiedad DisableAllCommands para especificar cómo interactúan los objetos MenuCommand con el comportamiento.
Adornos
Adorner puede verse como un servidor proxy entre elementos relacionados con la interfaz del usuario, que están compuestos de objetos Glyph, y BehaviorService.
Cada Adorner puede estar habilitado o deshabilitado. Sólo los objetos Adorner habilitados recibirán comprobación de visitas y mensajes de dibujo por parte de BehaviorService.
Cuando se agrega un objeto Adorner a la colección BehaviorServiceAdornerCollection de BehaviorService, la colección establece la propiedad BehaviorService de manera que Adorner puede volver a llamar a BehaviorService.
Al llamar al método Invalidate del objeto Adorner se obliga al objeto BehaviorService asociado a actualizar la ventana Adorner.
Insertar comportamientos
La forma más fácil de agregar objetos Behavior a la pila de comportamientos consiste en utilizar objetos Glyph, si bien no es la única forma. Los objetos Glyph pueden, por sí mismos, insertar objetos Behavior en la pila de comportamiento. Del mismo modo, también se puede insertar directamente objetos Behavior en dicha pila. Imagine que quiere arrastrar un identificador de tirador en torno a la superficie de diseño. En lugar de tener que escribir la lógica necesaria para hacer un seguimiento de los momentos en que el usuario está arrastrando algún elemento, el propio objeto Glyph realiza las acciones siguientes en conexión con la pila de comportamientos.
Glyph tiene un objeto Behavior asociado que responde a un gesto del mouse.
Al apretar el botón del mouse, Glyph inserta un nuevo objeto Behavior en la pila de comportamientos. Este objeto Behavior controla los eventos de movimiento del mouse y de soltar el mouse. También puede deshabilitar todos los comandos de menú, de manera que mientras dure la operación de arrastre queda inhabilitado cualquier método abreviado de teclado u otro comando.
Al soltar el botón del mouse, Behavior finaliza el gesto de movimiento y se sale de la pila de comportamientos. Esto restablece automáticamente el objeto Behavior anterior.
Nota
La arquitectura de BehaviorService está ligada al modelo de formularios Windows Forms y, por consiguiente, no es compatible con otras tecnologías de presentación como, por ejemplo, formularios Web Forms.