Вопрос

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

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

Это было полезно?

Решение

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

<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 унаследован от родительского контроля.Поэтому вам просто нужно изменить FontSize вашего главного окна.

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

Добавьте стиль для Window в свой 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}" />

*Обратите внимание, что этот стиль можно использовать с элементами управления, имеющими contentPresenter.

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

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

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

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

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

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

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

Чтобы динамически изменить размер шрифта глобально с помощью Ctrl-Mousewheel:

КСАМЛ:

<Window Name="MainWindow" ... PreviewMouseWheel="MainWindow_PreviewMouseWheel">

код позади:

private void MainWindow_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if ((Keyboard.Modifiers & ModifierKeys.Control) != 0)
    {
        if (e.Delta > 0)
            ++mainCtrl.FontSize;
        if (e.Delta < 0 && mainCtrl.FontSize > 1)
             --mainCtrl.FontSize;
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top