Frage

Ich bin eine WPF-Anwendung zu schaffen, und ich möchte den besten Weg kennen, um die Schriftgröße für jedes Element in der ui zu ändern. Muss ich ein Ressourcenverzeichnis erstellen und Styles setzen die Schriftgröße für alle Steuerelemente einstellen ich verwenden?

Was ist die beste Praxis?

War es hilfreich?

Lösung

ich tun würde es so aus:

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

So, wenn ich alle Steuerelemente ändern will, ich würde nur den „baseStyle“ Stil ändern muß, wäre der Rest nur von ihm erben. (Das ist, was BasedOn Eigenschaft diejenigen, können Sie auch die Basis Stil erweitern, wenn Sie andere Setter erstellen innerhalb des traditionellen Stils)

Andere Tipps

FontSizeProperty wird von übergeordneter Steuerung geerbt. Sie müssen also nur Schriftgrad des Hauptfensters ändern.

Wenn Sie nicht über das dynamische Verhalten müssen dies sollte funktionieren:

Fügen Sie einen Stil für Fenster auf Ihre Resource

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

Wenden Sie den Stil für Ihr Hauptformular (wird nicht implizit angewandt werden, da es einen Typen abgeleitet)

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

Eine andere Möglichkeit ist es, die Fontfamily und Fontsize als Ressourcen zu definieren.

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

Auf diese Weise können Sie sie in Ihrem Setter verwenden.

         

         

<Window> hat eine Eigenschaft Fontsize.

So Sie gewünschte Schriftgröße in Element festlegen können, wenn Sie die Schriftgröße in allen Elementen innerhalb dieses Fensters ändern möchten.

<Window FontSize="12">

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

Auf diese Weise können Sie die Schriftgröße zur Laufzeit auch ändern.

TextElement.FontSize ist eine inherit Eigenschaft, die bedeutet, dass Sie einfach die Schriftgröße an Root-Elemente gesetzt, und alle Kinder Elemente werden diese Größe verwenden (solange diese nicht in manuell ändern)

Für alle Stile in WPF, sollten Sie ein separates Ressourcenverzeichnis haben, den die Stile für Ihre Anwendung enthält.

Wenn Sie eine einzelne Schriftgröße haben wollen, die über die App ebenfalls verwendet wird, dann erstellen Sie einfach einen Stil für die Schriftgröße. Sie können es entweder geben Sie einen eindeutigen Namen / Schlüssel explizit zu verwenden, oder Sie können einen target gesetzt, die im gesamten App überschreiten wird.

Explicit Key:

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

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

* Diese Art Hinweis kann mit Steuerungen verwendet werden, die contentPresenters

haben

Für alle Textblocks in der App:

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

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

Wenn Sie programmatisch globale Schriftgrad ändern, nicht statisch (XAML), einmal angebracht werden für alle Fenster, können Sie tun:

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

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

Diese Werte werden auf jeden Textblock angewendet, Labels und fast jedem Text in einer beliebigen Windows, während es definiert keine explizite Fontsize hat. Dies wirkt sich jedoch nicht für TextBox, müssen Sie für sie oder andere besondere Kontrollen einen ähnlichen Code schreiben.

Um dynamisch die Schriftgröße global ändern mit ctrl-Mausrad:

XAML:

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

Code hinter:

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;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top