WallPanel per WPF: disposizione a muro

di Cristian Civera, in WPF,

Proseguendo con gli esperimenti in XAML, ho provato a sviluppare un Panel personalizzato che disponga i suoi figli con una struttura a muro, più un gioco che un reale utilità.

Per farlo ho creato una classe WallPanel che eredita da Panel e che sovrascrive due metodi: MeasureOverride e ArrangeOverride. Tutto il sistema di posizionamento e dimensione degli elementi in WPF si distingue infatti in due fasi. Nella prima ogni elemento chiede ai propri figli (se ne dispone) quale dimensione preferiscono e i figli faranno altrettanto ricorsivamente. Nella seconda fase viene indicato dal padre per ogni elemento qual'è lo spazio che ha disposizione. Il WallPanel nella MeasureOverride chiede ai figli la loro dimensione calcolando lo spazio totale di cui ha bisogno. Nell'ArrangeOvveride riceve in argomento lo spazio che gli è stato assegnato e dispone in modo sfalsato, su più righe, i figli in modo da dare l'effetto desiderato.

Successivamente il pannello lo si può usare mappando un nuovo namespace xml e usando il tag WallPanel come si è soliti fare in XAML:

<Window x:class="Test1">
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="Wall" Height="400" 
<strong>      xmlns:c="clr-namespace:TestApplication"</strong>>
<strong>    <c:WallPanel Dockpanel.Dock="Top" x:name="wallPanel"></strong>
          <WallPanel.Background>
            <ImageBrush TileMode="Tile" Stretch="None" />
                <ImageBrush.ImageSource/>
                    <Bitmapimage UriSource="936.jpg" />
                </ImageBrush.ImageSource/>
            </ImageBrush/>
        </Wallpanel.Background>
... figli
<strong></c:WallPanel></strong>...

E questo il risultato con un po' di figli (Rectangle, TextBox, Button)

WallPanel

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese