tutorial tipo letra como cambiar c# wpf fonts default

c# - tipo - ¿Cómo configurar la fuente predeterminada para una aplicación WPF?



xaml c# (6)

Encontré esto :

TextElement.FontFamilyProperty.OverrideMetadata( typeof(TextElement), new FrameworkPropertyMetadata( new FontFamily("Comic Sans MS"))); TextBlock.FontFamilyProperty.OverrideMetadata( typeof(TextBlock), new FrameworkPropertyMetadata( new FontFamily("Comic Sans MS")));

Quiero poder definir una familia de fuentes para mi aplicación WPF. Preferiblemente utilizando un diccionario de recursos como un tema al que se hace referencia desde App.xaml . Intenté crear un Style siguiente manera:

<Style TargetType="{x:Type Control}"> <Setter Property="FontFamily" Value="Segoe UI" /> </Style>

Pero esto no funciona. Establecer el tipo a TextBlock funciona para la mayoría de los controles, pero hay algunos controles donde esto no se aplica.

Sé que puede establecer la fuente en una ventana y hacer que todos los controles secundarios de esa ventana hereden la fuente. Pero creo que cualquier ventana de diálogo volverá a la fuente predeterminada, que no es exactamente lo que quiero.

¿Algunas ideas?


La mayoría de las soluciones propuestas no funcionaron para mí. Mi solución simple:

Agregue esto a App.xaml:

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

Agregue esto en su constructor MainWindow (después de InitializeComponent):

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


Pruebe esta solución simple en App.xaml (no se necesita código):

<SolidColorBrush x:Key="ForeBrush" Color="Blue" /> <Style x:Key="GenericTextStyle"> <!-- Generic control forecolor definition --> <Setter Property="Control.Foreground" Value="{StaticResource ForeBrush}" /> <!-- Add a definition for each unworking nested control --> <Style.Resources> <Style TargetType="{x:Type Label}"> <Setter Property="Foreground" Value="{StaticResource ForeBrush}" /> </Style> </Style.Resources> </Style>

Solo une tu estilo de Windows a esto. Funciona perfectamente para mi Solo algunas propiedades necesitan ser definidas en el árbol anidado. Por ejemplo, la propiedad FontSize se puede especificar en la sección genérica.

No sé por qué es necesario hacer este truco. Es extraño porque Label debería derivarse de Control. Alguien tiene alguna idea al respecto?


Suponiendo que las subclases de Window no anulan DefaultStyleKey , simplemente puede agregarlas a su estilo de ventana, ya que TextElement.FontFamilyProperty es una propiedad heredada:

<Style TargetType="{x:Type Window}"> <Setter Property="FontFamily" Value="Segoe UI" /> </Style>

También debe agregar lo siguiente a su constructor de la aplicación después de la llamada InitializeComponent :

FrameworkElement.StyleProperty.OverrideMetadata(typeof(Window), new FrameworkPropertyMetadata { DefaultValue = FindResource(typeof(Window)) });

Cómo funciona: una vez que el objeto de la aplicación finaliza la inicialización, el estilo de ventana especificado en él se convierte en el estilo predeterminado para todas las ventanas.


Una forma simple de hacerlo programáticamente:

public MainWindow() { this.FontFamily = new FontFamily("Segoe UI"); }


De hecho, puedes obtener una solución XAML completa que combine muchas de las otras respuestas aquí.

Si su ventana principal se llama WinMain (la que carga antes que las demás), simplemente agregue una referencia a un estilo llamado, por ejemplo, WinAll

<Window x:Class="MyNamespace.WinMain" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Title="WinMain" Height="450" Width="800" Style="{StaticResource WinAll}">

y luego define tu estilo de esta manera

<Style x:Key="WinAll" TargetType="{x:Type Window}"> <Setter Property="FontFamily" Value="Comic Sans MS" /> <Setter Property="FontSize" Value="14" /> </Style>