Cenni preliminari su BehaviorService

Aggiornamento: novembre 2007

La classe BehaviorService gestisce l'interfaccia utente in una finestra di progettazione e fornisce un sistema uniforme per modificare elementi dell'interfaccia utente quali eventi correlati al mouse, comandi di menu e operazioni di trascinamento della selezione OLE in fase di progettazione.

Gestione dell'interfaccia utente in fase di progettazione

Un aspetto principale della creazione di una fase di progettazione personalizzata è la gestione dell'interfaccia utente. Per fornire una fase di progettazione per il controllo personalizzato è possibile creare una finestra di progettazione personalizzata.

Lo sviluppatore di finestre di progettazione può creare layer di interfaccia personalizzati, denominati elementi grafici. All'interno di ciascun'area del layer è possibile creare tipi Glyph personalizzati per il disegno, il trascinamento e le altre operazioni di UI. Per ciascuna classe Glyph può essere disponibile un tipo Behavior associato. Behavior è una classe che dispone di overload per tutti gli input dell'utente, inclusi i comandi di menu, gli spostamenti del mouse e le operazioni di trascinamento della selezione OLE. È inoltre possibile aggiungere oggetti Behavior indipendentemente da un oggetto Glyph, in modo che sia possibile associarli all'input utente generico per l'intera finestra di progettazione. Tutte e tre le funzionalità menzionate vengono implementate mediante il tipo Behavior.

In .NET Framework versione 1.1 alcuni eventi, ad esempio OnMouseDragBegin, vengono esposti dalla classe ControlDesigner. In questo modello molta della logica di progettazione dell'interfaccia utente viene implementata nella classe EventHandler. Dal momento che l'utente può modificare diverse aree designate su un controllo, il modello richiede la scrittura di una gran quantità di logica di supporto.

Il tipo Behavior consente di risolvere tale situazione. BehaviorService si compone di due parti. Nella tabella visualizzata di seguito sono illustrate le due parti con le relative descrizioni.

Part

Descrizione

Stack di classi Behavior

Ciascuna classe dispone di metodi correlati a comandi di menu, operazioni di trascinamento della selezione OLE, eventi del mouse e così via. La classe nella parte superiore dello stack è la classe Behavior attiva e tutti gli input dell'utente vengono indirizzati a tale classe.

Oggetti Adorner e Glyph

Una classe Adorner è un layer invisibile tra l'area di progettazione e l'utente. Una classe Adorner può contenere oggetti Glyph, ovvero oggetti a renderizzazione leggera. Una classe Glyph può essere sottoposta a hit test da parte di BehaviorService e facoltativamente può esporre un oggetto Behavior che diventa la classe Behavior attiva fintantoché gli hit test di Glyph restituiscono un valore true.

Sebbene Progettazione Windows Form supporti ancora gli override della classe ControlDesigner originale per i trascinamenti e gli spostamenti del mouse, queste azioni vengono implementate come oggetti Behavior. Nella tabella riportata di seguito vengono visualizzati gli elementi della finestra di progettazione per un controllo semplice con il normale insieme di handle di trascinamento.

Elemento di comportamento

Descrizione

Elemento grafico di selezione

Un singolo layer di elementi grafici gestisce tutti gli oggetti Glyph dell'interfaccia utente di selezione.

Icona del corpo

Un oggetto Glyph del corpo completamente trasparente si trova nella parte superiore del controllo. Il relativo comportamento gestisce tutte le interazioni con il mouse.

Icona di aggancio

Gli oggetti Glyph di aggancio disegnano i punti di controllo relativi al controllo. I relativi oggetti Behavior controllano le operazioni di trascinamento.

Estensione dell'interfaccia utente di progettazione

Il modello BehaviorService consente di posizionare facilmente la nuova funzionalità su un livello superiore a quello di un'interfaccia utente di progettazione esistente. La nuova interfaccia utente resta indipendente dagli altri oggetti Glyph e Behavior definiti in precedenza. È ad esempio possibile accedere agli smart tag su alcuni controlli mediante un oggetto Glyph nell'angolo in alto a destra del controllo (Glifo Smart Tag).

Il codice smart tag crea il relativo layer Adorner e aggiunge a esso oggetti Glyph. In tal modo gli oggetti Glyph dello smart tag vengono tenuti separati dagli oggetti Glyph di selezione. Il codice necessario per l'aggiunta di un nuovo oggetto Adorner all'insieme Adorners è semplice.

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

Glifi e comportamenti

Il tipo Glyph è semplice. Se si richiede una funzionalità complessa, è possibile aggiungerla alla propria classe derivata da Glyph.

Gli oggetti Glyph possono includere oggetti Behavior, sebbene non siano necessari. Una classe Glyph senza oggetti Behavior dispone di una proprietà Behavior che restituisce null.

Una classe Behavior dispone di un metodo per ciascuna interazione utente supportata. La classe Behavior base, ad esempio, include metodi per il supporto di operazioni di trascinamento della selezione quali OnDragEnter e OnGiveFeedback.

La maggior parte dei metodi restituisce un valore booleano che indica se l'evento è stato gestito. Gli eventi di trascinamento presentano un valore nel parametro DragEventArgs. È possibile aggiungere o rimuovere singole voci di menu restituendole dal metodo FindCommand. Il metodo FindCommand funziona in combinazione con la proprietà DisableAllCommands per specificare la modalità di interazione degli oggetti MenuCommand con il comportamento.

Elementi grafici

Un oggetto Adorner può essere visualizzato come proxy tra gli elementi correlati all'interfaccia utente, costituiti da oggetti Glyph, e la classe BehaviorService.

Ciascuna classe Adorner può essere attivata e disattivata. Solo gli oggetti Adorner attivati riceveranno i messaggi relativi alle operazioni di disegno e hit test dall'oggetto BehaviorService.

Quando un oggetto Adorner viene aggiunto a una classe BehaviorServiceAdornerCollection di BehaviorService, l'insieme imposta la proprietà BehaviorService in modo che Adorner possa richiamare la classe BehaviorService.

La chiamata al metodo Invalidate dell'oggetto Adorner impone alla classe BehaviorService associata l'aggiornamento della finestra Adorner.

Comportamenti di push

Il sistema più semplice di aggiungere oggetti Behavior allo stack di comportamento prevede l'utilizzo di oggetti Glyph, ma non è l'unico sistema. Gli stessi oggetti Glyph possono eseguire il push degli oggetti Behavior sullo stack di comportamento, mentre lo sviluppatore può eseguire anche il push degli oggetti Behavior direttamente sullo stack di comportamento. Si consideri il caso del trascinamento di un punto di controllo intorno all'area di progettazione. Piuttosto che scrivere una logica che tenga traccia del momento in cui l'utente effettua il trascinamento, la classe Glyph esegue le azioni riportate di seguito in sequenza con lo stack di comportamenti.

  1. Alla classe Glyph è associata una classe Behavior che risponde a un'azione di pressione del pulsante del mouse.

  2. Quando il pulsante del mouse viene premuto, la classe Glyph esegue il push di una nuova classe Behavior sullo stack di comportamenti. La classe Behavior gestisce gli eventi di spostamento e di rilascio del pulsante del mouse. Può inoltre disattivare tutti i comandi di menu in modo che non vengano eseguite scelte rapide da tastiera o altri comandi per la durata dell'operazione di trascinamento.

  3. Quando il pulsante del mouse viene rilasciato, l'oggetto Behavior finalizza l'azione di spostamento ed esce dallo stack di comportamenti. In tal modo viene ripristinata la classe Behavior precedente.

Nota:

L'architettura di BehaviorService è collegata al modello dei Windows Form e pertanto non supporta altre tecnologie di visualizzazione quali i Web Form.

Vedere anche

Riferimenti

BehaviorService

Glyph

Adorner

EventHandler

Altre risorse

Estensione del supporto in fase di progettazione