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开发者_JS百科 and only solution which came to my mind is to create 3 different themes. Is it possible to make it simplier?
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.
Application.Current.MainWindow.FontSize = 12;
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.
精彩评论