2012-04-30 11 views
13

Come specificare il tag BasedOn in uno stile in uno stile definito in qualche altro file.Ereditarietà stile basata su diversi XAML

Esempio,

Dictionary1.xaml definisce

<Style x:Key="basicStyle" TargetType="TextBlock" > 
     <Setter Property="FontSize" Value="24"></Setter> 
     <Setter Property="Foreground" Value="DarkGray"></Setter> 
     <Setter Property="FontWeight" Value="Bold"></Setter> 
    </Style> 

In Dictionary2.xaml ho bisogno di qualcosa di simile

<Style x:Key="headerStyle" TargetType="TextBlock" > 
     <Setter Property="FontSize" Value="46"></Setter> 
     <Setter Property="Foreground" Value="DarkGray"></Setter> 
     <Setter Property="FontWeight" Value="Bold"></Setter> 
    </Style> 

Come raggiungere questo obiettivo?

risposta

16

Il modo più semplice:

In Dictionary2.xaml definire MergedDictionaries (subito dopo il tag di apertura ResourceDictionary):

<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/Path/to/Dictionary1.xaml" /> 
</ResourceDictionary.MergedDictionaries> 

E poi

<Style x:Key="headerStyle" TargetType="TextBlock" BasedOn="{StaticResource basicStyle}" > 
    ..... 
</Style> 

Questo risolverà il problema, ma come con tutte le soluzioni facili sono un trucco: ogni volta che unisci dizionari, crei effettivamente una copia del dizionario unito. Ed è ricorsivo: se hai Dict3.xaml e Dict4.xaml che caricano entrambi Dictionary2.xaml, avrai creato tre istanze di Dictionary1.xaml. Con una complessa struttura di dipendenze si può arrivare ad avere oltre 19.000 oggetti dizionario in memoria all'avvio dell'applicazione e il footprint di memoria va da 180MB a 1200MB (TrueStory ™ :().

La soluzione è un SharedResourceDictionary. L'implementazione nel tutorial dovrebbe essere vista come un punto di partenza e probabilmente richiederà un certo livello di ottimizzazione, a seconda dello scenario di utilizzo. "Wpf SharedResourceDictionary" per alcuni trucchi e soluzioni.

+0

Stavo cercando esattamente la stessa cosa al momento userò il modo semplice e continuerò a esplorare SharedResourceDictionary. – Tilak

Problemi correlati