Domanda

Sto creando un'applicazione WPF e mi piacerebbe conoscere il modo migliore per essere in grado di modificare la dimensione del carattere per ogni elemento nell'interfaccia utente. Posso creare un dizionario risorse e impostare gli stili per impostare la dimensione del carattere per tutti i controlli che uso?

Qual è la migliore pratica?

È stato utile?

Soluzione

Lo farei in questo modo:

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

In questo modo, se voglio cambiare tutti i controlli, avevo appena dovuto cambiare lo stile "baseStyle", il resto sarebbe solo ereditare da essa. (Questo è quello che proprietà BasedOn quelli, è anche possibile estendere lo stile di base se si crea altri setter all'interno dello stile ereditato)

Altri suggerimenti

FontSizeProperty viene ereditato dal controllo padre. Quindi non vi resta che cambiare FontSize della finestra principale.

Se non avete bisogno di comportamento dinamico questo dovrebbe funzionare:

Aggiungi uno stile per finestra per il vostro ResourceDictionary

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

Applicare lo stile al modulo principale (che non verrà applicata implicita perché è un tipo derivato)

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

Un'altra opzione è quella di definire il FontFamily e FontSize come risorse.

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

In questo modo è possibile usarli nei vostri setter.

         

         

<Window> ha una FontSize proprietà.

Così si può impostare fontsize desiderato in elemento se si desidera modificare il fontsize in tutti gli elementi all'interno di quella finestra.

<Window FontSize="12">

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

In questo modo è possibile modificare la dimensione dei caratteri in fase di esecuzione anche.

TextElement.FontSize è una proprietà ereditare, il che significa che si può semplicemente impostare la dimensione del carattere in elemento radice, e tutti gli elementi figli userà quelle dimensioni (fino a quando non si cambia manualmente)

Per tutti gli stili nel WPF, si dovrebbe avere un dizionario risorse separato che contiene gli stili per la vostra applicazione.

Se si desidera avere una sola dimensione di carattere che viene riutilizzata per tutta l'applicazione poi basta creare uno stile per quella dimensione del carattere. È possibile dare un nome / chiave univoca di utilizzare in modo esplicito o è possibile impostare un targetType che trascendono tutto l'app.

Chiave esplicito:

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

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

* Nota questo stile può essere utilizzato con i controlli che hanno contentPresenters

Per tutti TextBlocks nella app:

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

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

Se è necessario modificare a livello di FontSize globale, non staticamente (XAML), da applicare una volta per tutte le finestre, si può fare:

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

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

Questi valori vengono applicati a qualsiasi TextBlock, etichette e quasi ogni testo in qualsiasi finestra, mentre non ha un FontSize esplicito definito. Ma questo non influisce per TextBox, è necessario scrivere un codice simile per esso o eventuali altri controlli speciali.

Per modificare dinamicamente la dimensione del carattere globalmente con Ctrl-rotellina:

XAML:

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

codice dietro:

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;
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top