WPF - изменить глобальный размер шрифта во время выполнения - PullRequest
6 голосов
/ 29 декабря 2010

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

Ответы [ 3 ]

13 голосов
/ 29 декабря 2010

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

<Window FontSize="10" ...>

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

this.FontSize = 20;

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

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

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

3 голосов
/ 21 мая 2011
Application.Current.MainWindow.FontSize = 12;
0 голосов
/ 29 декабря 2010

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

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

Однако вам нужно помнить, чтобы добавить это к всем вашему тексту.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...