2010-12-28 15 views
6

Necesito agregar una funcionalidad a mi aplicación simple - para permitir al usuario cambiar el tamaño de fuente para toda la aplicación. es fácil de hacer? ¿Me puede dar alguna pista de cómo comenzar? Se requieren solo 3 tamaños de fuente predefinidos, pero la primera y única solución que me vino a la mente es crear 3 temas diferentes. ¿Es posible hacerlo más simple?WPF - cambie el tamaño de fuente global en el tiempo de ejecución

Respuesta

12

Afortunadamente, FontSize utiliza Property Value Inheritance. Eso significa que, siempre que no lo anule, FontSize se propagará automáticamente a todos los elementos de texto secundarios. Como resultado, se puede establecer una sola:

<Window FontSize="10" ...> 

y se aplicará a todos los elementos de texto en la ventana que no tienen un tamaño de fuente. Para cambiarlo en el código es simple también:

this.FontSize = 20; 

en el código subyacente de la ventana va a cambiar todos los tamaños de fuente especificados sobre la marcha. Esto también funciona para cosas que no parecen apoyar tamaño de la fuente:

<Grid TextElement.FontSize="15" ...> 

Lo mismo es cierto para las otras propiedades del texto que usted ha mencionado.

+0

Esta es una solución increíblemente simple en comparación con otras que he visto. ¡Gracias por la ayuda! – TheBlindSpring

0

En el nivel más básico que se necesita para enlazar la propiedad FontSize de su TextBlocks etc, a una variable que luego se puede cambiar para ser uno de los tres valores predefinidos:

<TextBlock FontFamily="Arial" Text="Sample text" FontSize="{Binding TextSize}" /> 

Sin embargo, se necesitaría para recordar agregar esto a todos su texto.

Una mejor solución sería enlazar el tamaño de los estilos que usa, pero de nuevo todo el texto debería diseñarse. Si utilizó un estilo implícito, entonces no tendría que recordar agregar la referencia a su texto, pero todo su texto tendría que tener el mismo aspecto. Si eso es un problema o no, dependerá de su aplicación.

3
Application.Current.MainWindow.FontSize = 12; 
Cuestiones relacionadas