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.