TOC

This article has been localized into Italian by the community.

Pannelli:

Il controllo Canvas

Il Canvas è probabilmente il Pannello più semplice di tutti. Non fa effettivamente niente di default, ti permette soltanto di aggiungere i controlli al suo interno e posizionarli manualmente esplicitando le coordinate.

Se hai mai usato un'altra libreria UI come WinForms, questo ti farà probabilmente sentire a tuo agio, ma mentre può essere allettante avere controllo assoluto di tutti i controlli figli, questo significa anche che il Pannello non farà niente se l'utente inizierà a ridimensionare la tua finestra, se localizzi del testo posizionato in modo assoluto o se il contenuto viene scalato.

Approfondiremo più avanti, ora vediamo un semplice esempio. Questo è principalmente per mostrarti quanto il Canvas faccia poco di default:

<Window x:Class="WpfTutorialSamples.Panels.Canvas"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Canvas" Height="200" Width="200">
	<Canvas>
		<Button>Button 1</Button>
		<Button>Button 2</Button>
	</Canvas>
</Window>

Come puoi vedere, anche se abbiamo 2 bottoni, sono entrambi posizionati nello stesso posto, quindi solo l'ultimo è visibile. Il Canvas non fa assolutamente nulla fino a che non inizi ad assegnare coordinate ai controlli figli. Questo è possibile usando le proprietà di ancoraggio Left, Right, Top e Bottom dal controllo Canvas.

Queste proprietà ti permettono di specificare la posizione relativa ai quattro lati del Canvas. Di default, sono tutte impostate a NaN (Not a Number), e il Canvas posizionerà il controllo nell'angolo in alto a sinistra, ma come già detto, questo può essere facilmente modificato:

<Window x:Class="WpfTutorialSamples.Panels.Canvas"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Canvas" Height="200" Width="200">
	<Canvas>
		<Button Canvas.Left="10">Top left</Button>
		<Button Canvas.Right="10">Top right</Button>
		<Button Canvas.Left="10" Canvas.Bottom="10">Bottom left</Button>
		<Button Canvas.Right="10" Canvas.Bottom="10">Bottom right</Button>
	</Canvas>
</Window>

Nota come ho semplicemente impostato la proprietà o le proprietà che mi servivano. Per i primi due bottoni, ho voluto solo specificare un valore per l'asse X, quindi ho usato le proprietà Left e Right per spingere i bottoni verso il centro, da ogni direzione.

Per i bottoni in basso, ho usato sia Left/Right che Bottom per spingerli verso il centro in entrambe le direzioni. Normalmente viene specificato un valore per Top o Bottom e/o un valore per Left o Right.

Come detto, visto che il Canvas ti da completo controllo delle posizioni, non terrà conto del fatto che ci sia o meno abbastanza spazio per tutti i tuoi controlli o se si sovrappongono. Questo lo rende una scelta non idonea per quasi tutti i design di finestre di dialogo, ma è invece eccellente, come implica il nome (Canvas = tela), per almeno una cosa: Disegnare. WPF ha una manciata di controlli che possono essere inseriti in un Canvas per creare illustrazioni.

Z-Index

Nel prossimo esempio, useremo un paio dei controlli relativi alle forme di WPF per mostrare un'altro concetto molto importante quanto si usa il Canvas: Z-Index. Normalmente, se due controlli in un Canvas si sovrappongono, quello definito per ultimo nel markup avrà la precedenza e sarà sopra l'altro o gli altri. Tuttavia, utilizzando la proprietà Z-index della classe del Pannello, questo può essere facilmente cambiato.

Prima, un esempio dove non utilizziamo per niente z-index:

<Window x:Class="WpfTutorialSamples.Panels.CanvasZIndex"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CanvasZIndex" Height="275" Width="260">
    <Canvas>
        <Ellipse Fill="Gainsboro" Canvas.Left="25" Canvas.Top="25" Width="200" Height="200" />
        <Rectangle Fill="LightBlue" Canvas.Left="25" Canvas.Top="25" Width="50" Height="50" />
        <Rectangle Fill="LightCoral" Canvas.Left="50" Canvas.Top="50" Width="50" Height="50" />
        <Rectangle Fill="LightCyan" Canvas.Left="75" Canvas.Top="75" Width="50" Height="50" />
    </Canvas>
</Window>

Notare che siccome ogni rettangolo viene definito dopo il cerchio, tutti saranno sovrapposti al cerchio, e ognuno di loro si sovrapporrà a quello precedentemente definito. Proviamo a cambiare l'ordine:

<Window x:Class="WpfTutorialSamples.Panels.CanvasZIndex"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="CanvasZIndex" Height="275" Width="260">
    <Canvas>
        <Ellipse Panel.ZIndex="2" Fill="Gainsboro" Canvas.Left="25" Canvas.Top="25" Width="200" Height="200" />
        <Rectangle Panel.ZIndex="3" Fill="LightBlue" Canvas.Left="25" Canvas.Top="25" Width="50" Height="50" />
        <Rectangle Panel.ZIndex="2" Fill="LightCoral" Canvas.Left="50" Canvas.Top="50" Width="50" Height="50" />
        <Rectangle Panel.ZIndex="4" Fill="LightCyan" Canvas.Left="75" Canvas.Top="75" Width="50" Height="50" />
    </Canvas>
</Window>

Il valore di default di ZIndex è 0, ma abbiamo assegnato un nuovo valore a ogni forma. La regola è che l'elemento con il maggior z-index è sopra a quelli con valori più bassi. Se due valori sono identici, l'elemento definito per ultimo "vince". Come puoi vedere dallo screenshot, cambiando la proprietà ZIndex da un aspetto differente.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!