Pergunta

Eu estou criando um aplicativo WPF e eu gostaria de saber a melhor maneira de ser capaz de mudar o tamanho da fonte para cada elemento da interface do usuário. Eu criar um dicionário de recursos e definir estilos para definir o tamanho da fonte para todos os controles que eu uso?

Qual é a melhor prática?

Foi útil?

Solução

Eu faria isso desta maneira:

<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>

Dessa forma, se eu quero mudar todos os controles, eu tinha acabado de ter que mudar o estilo "baseStyle", o resto seria apenas herdar a partir dele. (Isso é o que BasedOn propriedade desses, você também pode estender o estilo base, se você criar outras setters interior do estilo herdado)

Outras dicas

FontSizeProperty é herdada de controle pai. Então você só precisa mudar FontSize de sua janela principal.

Se você não precisa de comportamento dinâmico isso deve funcionar:

Adicionar um estilo de janela a sua ResourceDictionary

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

Aplique o estilo a sua principal forma (não será aplicada implícita porque é um derivado tipo)

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

Outra opção é definir o FontFamily e FontSize como recursos.

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

Dessa forma, você pode usá-los em seus setters.

<Window> tem um FontSize propriedade.

Então você pode definir fontsize desejado no elemento se você quiser alterar o tamanho da fonte no todos os elementos dentro dessa janela.

<Window FontSize="12">

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

Desta forma, você pode mudar o tamanho da fonte em tempo de execução também.

TextElement.FontSize é uma propriedade herdar, o que significa que você pode simplesmente definir o tamanho da fonte no elemento raiz, e todos os elementos filhos vão usar esse tamanho (desde que você não alterá-los manualmente)

Para quaisquer estilos em WPF, você deve ter um dicionário de recursos separado que contém os estilos para a sua aplicação.

Se você quer ter um único tamanho de fonte que está reutilizada em todo o aplicativo, em seguida, basta criar um estilo para que o tamanho da fonte. Você pode dar um nome / chave única explicitamente usar ou você pode definir um targetType que irá transcender todo o aplicativo.

Key explícita:

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

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

* Nota Este estilo pode ser usado com controles que têm contentPresenters

Para todos os TextBlocks no aplicativo:

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

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

Se você precisa mudar programaticamente TamanhoDoTipoDeLetra global, não estaticamente (XAML), a ser aplicado de uma vez por todas as suas janelas, você pode fazer:

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

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

Estes valores são aplicados a qualquer TextBlock, Etiquetas e quase todo o texto em todas as janelas, enquanto ele não tem um FontSize explícita definido. Mas isso não afeta em TextBox, você tem que escrever um código semelhante para isso ou quaisquer outros controles especiais.

Para alterar dinamicamente o tamanho da fonte globalmente com ctrl-mousewheel:

XAML:

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

código por trás:

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;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top