Pregunta

Estoy creando una aplicación de WPF y me gustaría saber la mejor manera de ser capaz de cambiar el tamaño de fuente para cada elemento de la interfaz de usuario. Cómo puedo crear un diccionario de recursos y establecer estilos para ajustar el tamaño de fuente para todos los controles que uso?

¿Cuál es la mejor práctica?

¿Fue útil?

Solución

Me gustaría hacerlo de esta manera:

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

De esta manera, si quiero cambiar todos los controles, que acababa de tener que cambiar el estilo de "baseStyle", el resto acaba de heredar de ella. (Eso es lo que BasedOn propiedad aquellos, también se puede extender el estilo de base si crea otros emisores dentro del estilo heredado)

Otros consejos

FontSizeProperty se hereda de control primario. Por lo que sólo necesita cambiar Tamaño de Letra de la ventana principal.

Si no es necesario un comportamiento dinámico que esto debería funcionar:

Añadir un estilo de ventana a su ResourceDictionary

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

Aplicar el estilo a su forma principal (no se aplica implícita porque es un tipo derivado)

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

Otra opción es definir el FontFamily y Tamaño de Letra como recursos.

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

De esa manera usted puede utilizarlos en sus definidores.

         

         

<Window> tiene una propiedad Tamaño de Letra.

Así se puede establecer tamaño de fuente deseado en el elemento si desea cambiar el tamaño de fuente en todos los elementos dentro de esa ventana.

<Window FontSize="12">

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

De esta manera se puede cambiar el tamaño de fuente en tiempo de ejecución también.

TextElement.FontSize es una propiedad hereda, lo que significa que puede establecer simplemente el tamaño de la fuente al elemento raíz, y todos los elementos secundarios utilizará ese tamaño (siempre y cuando no cambie manualmente)

Para cualquier estilo en WPF, usted debe tener un diccionario de recursos independiente que contiene los estilos para su aplicación.

Si usted quiere tener un único tamaño de fuente que se reutiliza en toda la aplicación a continuación, basta con crear un estilo para que el tamaño de la fuente. O se puede dar un nombre de clave única / a utilizar de forma explícita o puede establecer un targetType que trascienda lo largo de la aplicación.

Key explícito:

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

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

* Nota este estilo se puede utilizar con controles que tienen contentPresenters

Para todos los bloques de texto en la aplicación:

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

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

Si es necesario cambiar mediante programación Tamaño de Letra global, no estáticamente (XAML), que se aplicará una vez por todas sus ventanas, puede hacerlo:

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

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

Estos valores se aplican a cualquier TextBlock, etiquetas y casi cualquier texto en cualquier ventana, mientras que no tiene un Tamaño de Letra explícita definida. Pero esto no afecta de cuadro de texto, usted tiene que escribir un código similar para el material o cualquier otros controles especiales.

Para cambiar dinámicamente el tamaño de la fuente a nivel mundial con ctrl-rueda del ratón:

XAML:

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

código detrá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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top