WPF-изменение глобального размера шрифта во время выполнения

Мне нужно добавить одну функциональность в мое простое приложение-чтобы пользователь мог изменять размер шрифта для всего приложения. Это легко сделать? Можешь подсказать, с чего начать? Требуется иметь только 3 предопределенных размера шрифта, но первое и единственное решение, которое пришло мне на ум, - создать 3 разные темы. Можно ли сделать это проще?

3 ответов


к счастью, FontSize использует Наследование Значения Свойства. Это означает, что до тех пор, пока не переопределить его,FontSize будет автоматически распространяться на все дочерние текстовые элементы. В результате, вы можете установить один:

<Window FontSize="10" ...>

и он будет применяться ко всем текстовым элементам в этом окне, которые не имеют размера шрифта. Изменить его в коде также просто:

this.FontSize = 20;

в коде-за окном изменится все неопределенные размеры шрифта на лету. Этот также работает для вещей, которые, похоже, не поддерживают размер шрифта:

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

то же самое верно для других свойств текста, которые вы упомянули.


Application.Current.MainWindow.FontSize = 12;

на самом базовом уровне вы должны связать FontSize свойства TextBlocks etc, к переменной, которую вы можете изменить, чтобы быть одним из ваших трех предопределенных значений:

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

однако вам нужно будет не забыть добавить это в все ваш текст.

лучшим решением было бы привязать размер стилей, которые вы используете, но, опять же, весь текст должен быть оформлен. Если бы вы использовали неявный стиль, вам не пришлось бы запоминать добавьте ссылку на свой текст, но весь ваш текст должен выглядеть одинаково. Является ли это проблемой или нет, зависит от вашего приложения.