ASP.Net  »  Guide  »  Guida Silverlight 

Forme Complesse



Quando dobbiamo realizzare forme complesse, non possiamo più utilizzare direttamente le classi per disegnare primitive grafiche come Line piuttosto che Ellipse, ma dobbiamo utilizzare un altro l'elemento, che eredita sempre da Shape, ma ben più potente e versatile degli altri, l'oggetto Path.

Path espone un'unica proprietà: Data, di tipo Geometry, è utilizzata per definire la struttura della forma da rappresentare, sia tramite l'utilizzo del relativo modello ad oggetti, sia tramite uno specifico mini-linguaggio.

Il tipo Geometry è astratto quindi esistono una serie di classi che ereditano da esso e che specificano la forma che sarà rappresentata. La maggior parte degli oggetti Geometry permettono di creare le forme e linee viste nelle lezioni precedenti, per esempio possiamo creare una linea ed un ellisse tramite Path e gli elementi LineGeometry ed EllipseGeometry.

<Path Stroke="Green" StrokeThickness="10">
  <Path.Data>
    <LineGeometry StartPoint="20,20" EndPoint="100,20" />
  </Path.Data>
</Path>

<Path Margin="10" Fill="Blue" Stroke="Black">
  <Path.Data>
    <EllipseGeometry RadiusX="50" RadiusY="25" Center="50,25" />
  </Path.Data>
</Path>

Figura 62. Linee ed ellissi con Path

Linee ed ellissi con Path

Fino ora niente di nuovo, però possiamo già notare un piccolo particolare, Geometry definisce le proprietà della forma che sarà rappresentata mentre Path espone solo le proprietà legate al disegno della figura. Grazie a questa separazione delle responsabilità ed agli elementi GeometryGroup e PathGeometry possiamo creare figure molto complesse. GeometryGroup permette di raggruppare più elementi Geometry in uno.

<Path Fill="Purple" Stroke="Black" Margin="10" StrokeThickness="10">
  <Path.Data>
    <GeometryGroup>
      <RectangleGeometry Rect="0,0 100,100" />
      <EllipseGeometry Center="50,50" RadiusX="35" RadiusY="25" />
    </GeometryGroup>
  </Path.Data>
</Path>

<Path Fill="Purple" Stroke="Black" Margin="10" StrokeThickness="10">
  <Path.Data>
    <GeometryGroup>
      <RectangleGeometry Rect="0,0 100,100" />
      <EllipseGeometry Center="50,50" RadiusX="35" RadiusY="25" />
    </GeometryGroup>
  </Path.Data>
</Path>

Figura 63. Riempimento del path in modalità EvenOdd

Riempimento del path in modalità EvenOdd

Le strategie di riempimento delle forme, definite dalla proprietà FillRule, sono le solite due, EvenOdd e NonZero, di cui abbiamo parlato nelle lezioni precedenti. Nell'ultimo esempio impostando la proprietà FillRule, esposta dall'oggetto GeometryGroup, a NonZero otteniamo il seguente risultato:

Figura 64. Riempimento del path in modalità NonZero

Riempimento del path in modalità EvenOdd

Il fatto più interessante di questo esempio è che in questo caso stiamo creando un'unica figura, non una semplice sovrapposizione dei due oggetti Rectangle e Ellipse. Abbiamo quindi un unico elemento per l'interfaccia utente, vantaggio che si rivela importante in termini di performance, quando visualizziamo immagini molto complesse, realizzate assemblando e sovrapponendo fra loro molti oggetti Geometry.

Ultimi articoli ASP.Net

LINQ e la trappola della 'deferred execution'

Una "trappola" in cui si può incappare utilizzando il risultato di...

C#, le Custom Type Conversion

Conversioni personalizzate tra classi, creare metodi particolari per...

Introduzione a Entity Framework

Il framework ORM messo a disposizione da .NET

Repeater: visualizzare un feed RSS

Utilizzare il controllo XMLDataSource e sfruttare il metodo XPath()...

Repeater, il server control "semplice"

Cos'è e come funziona il controllo Repeater

Altri articoli

Guide ASP.Net

Guida ASP.NET MVC Best Practices

Un workflow dettagliato e ricco di suggerimenti pratici per...

Guida ASP.NET Starter Kit

Un modo semplice per imparare ad utilizzare le tecnologie Microsoft...

Guida Visual Studio 2010

L'ambiente di sviluppo di riferimento per sviluppare applicazioni su...

Altre guide

Newsletter @Microsoft Dev

Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso Progettazione database

11 Maggio 2012 a Milano
Disponibilità: 6 Posti

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto