tomo
tomo

Reputation: 1950

WPF - change global font size at runtime

I need to add one functionality to my simple application - to allow user to change font size for whole aplication. Is it easy to do? Can you give me any hint how to start? It's required to have only 3 predefined font sizes but the first and only solution which came to my mind is to create 3 different themes. Is it possible to make it simplier?

Upvotes: 6

Views: 8807

Answers (3)

Vipul
Vipul

Reputation: 1583

Application.Current.MainWindow.FontSize = 12;

Upvotes: 3

Rick Sladkey
Rick Sladkey

Reputation: 34250

Luckily, FontSize uses Property Value Inheritance. That means that so long as don't override it, FontSize will be automatically propagated to all child text elements. As a result, you can set a single:

<Window FontSize="10" ...>

and it will apply to all text elements in that window that don't have a font size. To change it in code is simple as well:

this.FontSize = 20;

in the code-behind of the window will change all unspecified font sizes on the fly. This also works for things that don't seem to support font size:

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

The same is true for the other text properties you mentioned.

Upvotes: 13

ChrisF
ChrisF

Reputation: 137188

At the most basic level you need to bind the FontSize property of your TextBlocks etc, to a variable which you can then change to be one of your three predefined values:

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

However, you would need to remember to add this to all your text.

A better solution would be to bind the size of the styles you use, but again all text would have to be styled. If you used an implicit style then you wouldn't have to remember to add the reference to your text, but all your text would have to look the same. Whether that's a problem or not will depend on your application.

Upvotes: 0

Related Questions