Глобальный размер шрифта WPF


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

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

8 56

8 ответов:

Я бы сделал это так:

<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 свойство те, Вы также можете расширить базовый стиль, Если вы создаете другие сеттеры внутри унаследованного стиля)

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

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

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

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

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

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

другой вариант-определить FontFamily и FontSize как ресурсы.

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

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

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

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

<Window FontSize="12">

</Window>
Application.Current.MainWindow.FontSize = _appBodyFontSize;

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

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

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

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

Явный Ключ:

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

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

*обратите внимание, этот стиль можно использовать с элементами управления, которые имеют contentPresenters

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

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

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

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

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

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

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