Общий размер шрифта WPF

Я создаю WPF-приложение, и я хотел бы знать, как лучше всего изменить размер шрифта для каждого элемента в ui. Создать словарь ресурсов и установить стиль для установки размера шрифта для всех элементов управления, которые я использую?

Какова наилучшая практика?

Ответ 1

Я бы сделал это следующим образом:

<Window.Resources>
        <Style TargetType="{x:Type Control}" x:Key="baseStyle">
            <Setter Property="FontSize" Value="100" />
        </Style>
        <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type Label}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource baseStyle}"></Style>
        <Style TargetType="{x:Type ListView}" BasedOn="{StaticResource baseStyle}"></Style>
        <!-- ComboBox, RadioButton, CheckBox, etc... -->
    </Window.Resources>

Таким образом, если я хочу изменить ВСЕ элементы управления, мне просто нужно будет изменить стиль baseStyle, остальное просто наследует его. (Что же такое свойство BasedOn, вы также можете расширить базовый стиль, если вы создаете другие сеттеры внутри унаследованного стиля)

Ответ 2

FontSizeProperty наследуется от родительского контроля. Поэтому вам просто нужно изменить FontSize вашего главного окна.

Если вам не требуется динамическое поведение, это должно работать:

Добавить стиль для окна в ResourceDictionary

<Style TargetType="{x:Type Window}">
     <Setter Property="FontSize" Value="15" />
</Style>

Примените стиль к вашей основной форме (не будет применяться неявно, потому что это производный тип)

 Style = (Style)FindResource(typeof (Window));

Ответ 3

Другим вариантом является определение FontFamily и FontSize в качестве ресурсов.

<FontFamily x:Key="BaseFontFamily">Calibri</FontFamily>
<sys:Double x:Key="BaseFontSize">12</sys:Double>

Таким образом вы можете использовать их в своих сеттерах.

     

     

Ответ 4

<Window> имеет свойство FontSize.

Таким образом, вы можете установить желаемый fontsize в элементе, если хотите изменить шрифт во всех элементах этого окна.

<Window FontSize="12">

</Window>

Ответ 5

Application.Current.MainWindow.FontSize = _appBodyFontSize;

Таким образом вы также можете изменить размер шрифта во время выполнения.

Ответ 6

Для любых стилей в WPF у вас должен быть отдельный словарь ресурсов, содержащий стили для вашего приложения.

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

Явный ключ:

<Style
    x:Key="MyFontSize"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<Control
    Style="{StaticResource MyFontSize}" />

* Обратите внимание, что этот стиль можно использовать с элементами управления, содержащими контент-пресвитеры

Для всех текстовых блоков в приложении:

<Style
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
</Style>

<TextBlock
        Text="This text will be size 10" />

Ответ 7

TextElement.FontSize - свойство inherit, что означает, что вы можете просто установить размер шрифта в корневом элементе, и все дочерние элементы будут использовать этот размер (если вы не измените их вручную)

Ответ 8

Если вам необходимо программно изменить глобальный FontSize, а не статически (XAML), который будет применяться один раз для всех ваших окон, вы можете сделать:

TextElement.FontSizeProperty.OverrideMetadata(
            typeof(TextElement),
            new FrameworkPropertyMetadata(16.0));

        TextBlock.FontSizeProperty.OverrideMetadata(
            typeof(TextBlock),
            new FrameworkPropertyMetadata(16.0));

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