wpf fonts

Tamaño de fuente global de WPF



fonts (8)

Estoy creando una aplicación WPF y me gustaría saber la mejor manera de poder cambiar el tamaño de la fuente para cada elemento en la interfaz de usuario. ¿Creé un diccionario de recursos y configuré Estilos para establecer el tamaño de fuente para todos los controles que uso?

cual es la mejor practica?


FontSizeProperty se hereda de Parent Control. Entonces solo necesitas cambiar FontSize de tu ventana principal.

Si no necesita un comportamiento dinámico, esto debería funcionar:

Agregue un estilo para Window a su ResourceDictionary

<Style TargetType="{x:Type Window}"> <Setter Property="FontSize" Value="15" /> </Style>

Aplica el estilo a tu forma principal (no se aplicará implícitamente porque es un tipo derivado)

Style = (Style)FindResource(typeof (Window));


Lo haría de esta manera:

<Window.Resources> <Style TargetType="{x:Type Control}" x:Key="baseStyle"> <Setter Property="FontSize" Value="100" /> </Style> <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style> <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style> <!-- ComboBox, RadioButton, CheckBox, etc... --> </Window.Resources>

De esa forma, si quiero cambiar TODOS los controles, solo tendría que cambiar el estilo "baseStyle", el resto simplemente heredaría de él. (Eso es lo que en virtud de esa propiedad, también puedes extender el estilo base si creas otros setters dentro del estilo heredado)


Otra opción es definir FontFamily y FontSize como recursos.

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily> <sys:Double x:Key="BaseFontSize">12</sys:Double>

De esa forma puedes usarlos en tus setters.


Para cualquier estilo en WPF, debe tener un diccionario de recursos independiente que contenga los estilos para su aplicación.

Si desea tener un único Tamaño de fuente que se reutilice en toda la aplicación, solo cree un estilo para ese tamaño de letra. Puede darle un nombre / clave único para usar explícitamente o puede establecer un targetType que trascienda a través de la aplicación.

Clave explícita:

<Style x:Key="MyFontSize" TargetType="TextBlock"> <Setter Property="FontSize" Value="10" /> </Style> <Control Style="{StaticResource MyFontSize}" />

* Tenga en cuenta que este estilo se puede usar con controles que tienen contentPresenters

Para todos los bloques de texto en la aplicación:

<Style TargetType="TextBlock"> <Setter Property="FontSize" Value="10" /> </Style> <TextBlock Text="This text will be size 10" />


Si necesita cambiar programáticamente FontSize global, no estáticamente (XAML), para aplicarse una vez para todas sus ventanas, puede hacer:

TextElement.FontSizeProperty.OverrideMetadata( typeof(TextElement), new FrameworkPropertyMetadata(16.0)); TextBlock.FontSizeProperty.OverrideMetadata( typeof(TextBlock), new FrameworkPropertyMetadata(16.0));

Estos valores se aplican a cualquier TextBlock, Label y casi cualquier texto en cualquier ventana, mientras que no tiene un FontSize explícito definido. Pero esto no afecta a TextBox, tiene que escribir un código similar para él o cualquier otro control especial.


<Window> tiene una propiedad FontSize.

De modo que puede establecer el tamaño de fuente deseado en el elemento si desea cambiar el tamaño de fuente en todos los elementos dentro de esa ventana.

<Window FontSize="12"> </Window>


TextElement.FontSize es una propiedad heredada, lo que significa que simplemente puede establecer el tamaño de la fuente en el elemento raíz, y todos los elementos secundarios usarán ese tamaño (siempre y cuando no los cambie manualmente)


Application.Current.MainWindow.FontSize = _appBodyFontSize;

De esta forma, puede cambiar el Tamaño de fuente en tiempo de ejecución también.