2009-11-23 10 views
6

Vorrei fornire ogni Control un determinato FontFamily e FontWeight in Silverlight 4.0. So che gli stili possono applicarsi a tutti i controlli di un certo tipo, così ho provato questo:Applicazione di FontFamily a tutti i controlli di Silverlight 4 Beta

<Style TargetType="Control"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
</Style> 

Purtroppo, che non sembra funzionare. Posso farlo per i tipi che derivano da Control, tuttavia. Ad esempio, l'impostazione di TargetType a Button applica tali valori a ogni Button nella mia applicazione.

Perché non riesco a farlo per la classe di base Control, quindi?

risposta

5

Lo stile di controllo collegato al sistema di tipi può essere un po 'fuorviante. In realtà si basa sul valore della proprietà control DefaultStyleKey. Nel caso di un Button il valore è typeof(Button) e per un TextBox è typeof(Textbox).

Uno stile predefinito verrà applicato a un controllo se il valore TargetType corrisponde al valore di DefaultStyleKey di controlli. Non viene esaminato se il numero Type nel numero DefaultStyleKey sia un derivato di TargetType.

Le proprietà relative ai font sono un caso speciale poiché la maggior parte dei controlli erediterà i valori per le proprietà Font dal contesto di contenimento. Quindi è possibile ottenere efficacemente lo stesso risultato specificando FontFamily e FontWeight sull'elemento UserControl.

Modifica

Da un commento di OP: -

speravo che avrei potuto metterlo in un posto e avere ogni UserControl nella intera applicazione assumere quello stile.

Il più vicino che si può ottenere è quello di inserire uno stile con chiave nelle risorse dell'app e assicurarsi che tutti gli usercontrols si leghino a quello stile. Naturalmente ciò richiede ancora una certa cooperazione per ogni controllo dell'utente, ma almeno le scelte dei caratteri rimangono in un unico posto.

Per esempio in app.xaml: -

<Style x:Key="Common" TargetType="UserControl"> 
    <Setter Property="FontFamily" Value="Arial" /> 
    <Setter Property="FontWeight" Value="Bold" /> 
<Setter Property="Foreground" Value="Blue" /> 

Poi in ogni UserControl: -

<UserControl ...namespace stuff here... 
    Style="{StaticResource Common}"> 
    <!-- ... content here ... --> 
+0

Grazie, questo ha un senso. Anche se speravo di poterlo impostare in un unico punto e che ogni UserControl dell'intera applicazione assumesse quello stile. Credo che potrei creare un UserControl personalizzato per basare gli altri su, comunque. –

1

lo faccio specificando FontFamily nella mia radice visiva. Tutti i controlli figlio senza set FontFamily esplicito, derivano FontFamily dalla vista radice.

Solo ChildWindow ha bisogno di un'impostazione FontFamily aggiuntiva, poiché è ospitata in "root" über (come popup).

+0

qual è lo xaml con cui fai l'impostazione? la visualizzazione radice non accetta stili. –

1

Questo sarebbe di aiuto:

this.RootVisual = New MainPage(); 
(MainPage)this.RootVisual.FontFamily 
    = New System.Windows.Media.FontFamily(
    "/SLApplication;component/Fonts/segoeui.ttf#Segoe UI"); 
Problemi correlati