Riutilizzare gli elementi personalizzati usando i Template

di Cristian Civera, in Windows Presentation Foundation, XAML,

Windows Presentation Foundation è un framework molto versatile, perché gli elementi che dispone non hanno una rappresentazione grafica prefissata, ma bensì è variabile a seconda del tipo, degli stili e del template associategli. Quest'ultimo permette di ridefinire il layout di ogni classe, che eredita da Control, impostando la proprietà Template di tipo ControlTemplate. E' possibile quindi sfruttare questa caratteristica per definire un modello, un'icona, un'immagine o qualsiasi elemento che si vuole riutilizzare una o più volte e farne uso dichiarando un Control nel punto in cui lo si vuole inserire.

L'esempio seguente chiarisce meglio il concetto. Viene definito un ControlTemplate di nome Point nelle risorse e poi sfruttata la classe Control, che di per se non fa niente, per applicare il template e inserire il punto in più parti nel codice XAML.

<Canvas>
  <Canvas.Resources>

    <ControlTemplate x:Key="Point">
      <Ellipse Width="20" Height="20" Fill="Red" />
    </ControlTemplate>

  </Canvas.Resources>

  <Control Canvas.Left="50" Canvas.Top="10" Template="{StaticResource Point}" />

  <Button Canvas.Left="50" Canvas.Top="40">
    <DockPanel>
      <Control Template="{StaticResource Point}" />
      <TextBlock FontSize="20">Click</TextBlock>
    </DockPanel>
  </Button>

</Canvas>

Si può sfruttare al massimo questa caratteristica mediante la classe ContentControl che permette di specificare il Content, di tipo object, che deve mostrare applicando il DataTemplate specifico o quello generico da applicare qualora si trovi di fronte ad un particolare tipo.
L'esempio seguente definisce un DataTemplate, per tutti i tipi String, che mostra un pallino seguito dalla stringa e definisce un elemento ContentControl per mostrare formattata la stringa "Ciao":

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:s="clr-namespace:System;assembly=mscorlib"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

  <Canvas>
    <Canvas.Resources>

      <DataTemplate DataType="{x:Type s:String}">
        <DockPanel>
          <Ellipse Width="20" Height="20" Fill="Red" />
          <TextBlock FontSize="20" Text="{Binding}" />
        </DockPanel>
      </DataTemplate>

    </Canvas.Resources>

    <ContentControl Content="Ciao" />

  </Canvas>

</Page>

Questa tecnica viene utile quando all'interno delle medesima applicazione si vuole applicare lo stesso aspetto per il medesimo tipo (semplice o complesso) ogni qual volta viene mostrato.

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.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi