2009-11-23 12 views
6

Me gustaría dar a cada Control un cierto FontFamily y FontWeight en Silverlight 4.0. Yo sé que los estilos de ahora se pueden aplicar a todos los controles de un tipo determinado, por lo que he intentado esto:Aplicación de una FontFamily a todos los controles en Silverlight 4 Beta

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

Por desgracia, eso no parece funcionar. Sin embargo, puedo hacer esto para los tipos que se derivan de Control. Por ejemplo, establecer TargetType a Button aplica esos valores a cada Button en mi aplicación. Por qué no puedo hacer esto para la clase base Control, entonces?

Respuesta

5

El estilo de control vinculado al sistema de tipo puede ser un poco engañoso. De hecho, se basa en el valor de la propiedad de los controles DefaultStyleKey. En el caso de Button, el valor es typeof(Button) y para TextBox es typeof(Textbox).

Se aplicará un estilo predeterminado a un control si el valor TargetType es igual al valor DefaultStyleKey de los controles. No hay un examen de si el Type en el DefaultStyleKey es un derivado del TargetType.

Las propiedades relacionadas con las fuentes son un caso especial, ya que la mayoría de los controles heredarán los valores de las propiedades de la Fuente del contexto contenedor. Por lo tanto, puede obtener efectivamente el mismo resultado especificando FontFamily y FontWeight en el elemento UserControl.

Editar

De un comentario de la OP: -

Tenía la esperanza de que pudiera ponerlo en un lugar y tienen todo el control de usuario en toda la aplicación tomar en ese estilo.

Lo más cercano que puede obtener es colocar un estilo con clave en los recursos de la aplicación y asegurarse de que todos los controles de usuario se unan a ese estilo. Por supuesto, esto todavía requiere un poco de cooperación para el control de cada usuario, pero al menos las opciones de fuente permanecen en un solo lugar.

Por ejemplo, en App.xaml: -

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

Luego, en cada control de usuario: -

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

Gracias, eso tiene sentido. Aunque esperaba poder configurarlo en un solo lugar y hacer que cada UserControl en toda la aplicación adoptara ese estilo. Sin embargo, creo que podría crear un UserControl personalizado para que los demás funcionen. –

1

lo hago especificando FontFamily en mi raíz visual. Todos los controles secundarios sin el conjunto explícito de FontFamily, derivan FontFamily del visualizador raíz.

Solo ChildWindow necesita una configuración adicional de FontFamily, porque está alojado en "über" root visual (como ventana emergente).

+0

¿cuál es el xaml con el que realizas la configuración? raíz visual no tiene estilos. –

1

Esto sería de ayuda:

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