Vito Arconzo's Blog

.net, .net, .net & windows presentation foundation

Separare le risorse in WPF

In alcune situazioni è molto comodo separare alcune risorse come Styles, Templates in file esterni alla Window che poi utilizzerà queste risorse.

In Windows Presentation Foundation è possibile effettuare questa operazione utilizzando la classe ResourceDictionary.

Aggiungiamo un nuovo item al progetto selezionando un ResourceDictionary:

Dopo aver aggiunto questo elemento al nostro progetto, è possibile, in quest'ultimo definire qualsiasi cosa come ad esempio un Style.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    >
  <Style x:Key="TextBlockStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="FontSize" Value="20" />
    <Setter Property="Foreground" Value="Red"/>
  </Style>
</ResourceDictionary>

A questo punto è necessario "unire" il file di risorce esterno con le risorse dell'applicazione e lo facciamo nell'oggetto Application (App.xaml).

<Application x:Class="ResourceDictionarySample.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    StartupUri="Window1.xaml"
    >
    <Application.Resources>
      <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          <ResourceDictionary Source="Dictionary1.xaml" />
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>
    </Application.Resources>
</Application>

Infine, possiamo utilizzare normalmente la risorsa in qualsiasi punto dell'applicazione.

<Window x:Class="ResourceDictionarySample.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ResourceDictionarySample" Height="300" Width="300"
    >
  <StackPanel>
    <TextBlock 
      Style="{StaticResource TextBlockStyle}"
      Text="Windows Presentation Foundation" />
    <TextBlock 
      Style="{StaticResource TextBlockStyle}"
      Text="ResourceDictionary Sample"/>
  </StackPanel>
</Window>

Ho visto molto, in giro, la creazione di UserControl  solo per definire degli Styles o Templates esterni (come in questo cas) mentre, io sarei più portato a creare UserControl quando, oltre all'aspetto, dobbiamo implementare comportamenti personalizzati ai controlli.

Posted: May 28 2007, 03:27 PM by VitoA | with 1 comment(s)
Filed under:

Comments

<Vito Arconzo's Blog /> said:

Precedentemente ho parlato di come condividere le risorse in un'applicazione WPF tenendo queste in file

# May 31, 2007 1:09 PM