2013-01-17 8 views
6

Sto cercando di capire come impostare FontFamily nella mia app.xaml in modo tale da poter applicare dichiaratamente quello stile ovunque sia necessario. Nel ResourceDictionary posso applicare qualcosa di simile:Come memorizzare FontFamily come risorsa statica?

<System:Double x:Key="SmallTextSize">10</System:Double> 

Quello che voglio fare, allora è qualcosa di simile:

<FontFamily x:Key="MainFont">Wingdings</FontFamily> 

Ma, l'unica cosa che posso andare al lavoro è uno stile implicita, che richiede un obiettivo e più dichiarazioni del carattere che voglio usare. Devo essere in grado di applicare lo stile alla fine con la proprietà FontFamily di qualsiasi controllo.

Ecco il più vicino posso venire attualmente:

<System:String x:Key="MainFont">Wingdings</System:String> 
<Style TargetType="UserControl"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"></Setter> 
</Style> 

Questa implementazione non funziona su qualcosa di simile perché si aspetta MainFont sia un FontFamily, non una stringa:

<TextBlock Text="{Binding}" Margin="0,0,0,4" FontWeight="Normal" FontFamily="{StaticResource MainFont}" FontSize="14.667" /> 

Come dovrebbe Lo gestisco? Grazie!

+0

Ecco una possibile soluzione se non si trova una risposta più adatta: utilizzare una proprietà di dipendenza allegata per impostare 'FontFamily'. Otterrai quindi qualcosa del tipo: ''. –

+0

Grazie, ma questo è l'esatto opposto di quello che sto cercando. Sto cercando di consolidare gli stili in un'applicazione Silverlight MOLTO grande, quindi applicare gli stili a quel livello significherebbe migliaia di modifiche. –

+0

Forse mi manca qualcosa, ma se hai intenzione di impostare i caratteri come nell'esempio sopra, cioè 'FontFamily =" {StaticResource MainFont} "', allora richiederà lo stesso identico numero di modifiche. –

risposta

11

Non sono sicuro di averlo capito perfettamente, poiché quello che faccio è;

<FontFamily x:Key="MainFont">WingDings</FontFamily> 

Se stai parlando poi applicarlo a più istanze, senza dover dichiarare a ciascuno poi vorrei solo fare come;

<Object> 
    <Object.Resources> 
     <Style TargetType="TextBlock" BasedOn="{StaticResource YourDefaultTextBlockStyleToInheritOtherProperties}"> 
     <Setter Property="FontFamily" Value="{StaticResource MainFont}"/> 
     </Style> 
    </Object.Resources> 

    <!-- Your FontFamily automatically gets inherited to all children of the object 
     whether your object is say a Grid, or StackPanel, 
     or even an entire UserControl -->  
    <TextBlock Text="ABCDEFG"/> 
    <TextBlock Text="12345"/> 
    <TextBlock Text="!()*&@#"/> 

</Object> 
+0

Penso che la mia confusione derivi dalla dichiarazione principale, che mi dà un avvertimento sul fatto che non esiste un costruttore predefinito per 'FontFamily ', ma a quanto pare funziona ... –

+0

Nessun costruttore predefinito? haha, ehm, cosa? Incolla qui e ti faremo risolvere. –

+0

Ok, quindi ' Wingdings' nella mia App.xaml mi dà un piccolo avvertimento dicendo "Nessun costruttore predefinito trovato", ma, dopo aver visto ciò che hai postato, ho provato ad usarlo su un stile, ed ecco, ha funzionato. Vai a capire, non so perché VS2012 mi sta dando l'avvertimento. –