Cómo WPF define el tamaño de fuente en recursos estáticos

La unidad del tamaño de fuente WPF predeterminado es píxeles. Si desea expresar el tamaño de fuente en puntos pt, escríbalo en xaml para agregar el sufijo pt directamente. Pero en este momento, si se escribe pt cuando el recurso estático está tratando de definirse, le indicará que no se puede convertir en tiempo de ejecución.

La unidad predeterminada es Pixel como está escrito en el siguiente código

            <TextBlock Margin="10,10,10,10"
                       FontSize="10"
                       Text="林德熙是逗比"></TextBlock>
            <TextBlock Margin="10,10,10,10"
                       FontSize="10pt"
                       Text="林德熙是逗比"></TextBlock>

El efecto real de ejecución puede verse que la fuente que usa pt es obviamente más grande que el píxel

Esto está escrito en xaml, si desea escribir en el recurso, como el siguiente código, no podrá ejecutar

    <Window.Resources>
        <system:String x:Key="FontSize">10pt</system:String>
    </Window.Resources>
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <TextBlock Margin="10,10,10,10"
                       FontSize="10"
                       Text="林德熙是逗比"></TextBlock>
            <TextBlock Margin="10,10,10,10"
                       FontSize="{StaticResource FontSize}"
                       Text="林德熙是逗比"></TextBlock>
        </StackPanel>
    </Grid>

La razón es que la clase FontSize es de doble tipo, y la compilación indicará que la cadena no se puede convertir a la clase doble

An object of the type "System.String" cannot be applied to a property that expects the type "System.Double".	CelakercalbochallhiNerjufeeqalchelfu	MainWindow.xaml	19	

Pero, ¿por qué es posible agregar la unidad pt en el atributo escrito en xaml, porque el atributo TypeConverter está marcado en el atributo FontSize para convertir a través de este

De acuerdo con este método, una clase especial de tamaño de fuente se puede definir localmente

using System.Windows.Markup;

public class FontSizeExtension : MarkupExtension
{
    [TypeConverter(typeof(FontSizeConverter))]
    public double Size { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return Size;
    }
}

Pon esta clase en el código, y luego puedes escribir el siguiente código en el recurso xaml

    <Window.Resources>
        <local:FontSize x:Key="FontSize" Size="10pt"></local:FontSize>
    </Window.Resources>
    <Grid>
        <StackPanel VerticalAlignment="Center" HorizontalAlignment="Center">
            <TextBlock Margin="10,10,10,10"
                       FontSize="10"
                       Text="林德熙是逗比"></TextBlock>
            <TextBlock Margin="10,10,10,10"
                       FontSize="{StaticResource FontSize}"
                       Text="林德熙是逗比"></TextBlock>
        </StackPanel>
    </Grid>

En uso MarkupExtension puede ignorar Extensionescribir sólo la primera parte, que está escrito FontSizeen los recursos, en otras palabras, no tienen ningún problema de escritura FontSizeExtension

    <Window.Resources>
        <local:FontSizeExtension x:Key="FontSize" Size="10pt"></local:FontSizeExtension>
    </Window.Resources>

Esto le permite definir el tamaño de fuente en recursos estáticos

Acuerdo de licencia de intercambio de conocimientos
Este trabajo está licenciado bajo el Acuerdo de Licencia Internacional Creative Commons Reconocimiento-No comercial Uso-Compartir 4.0 de la misma manera . La reimpresión, el uso y el reenvío son bienvenidos, pero la firma del artículo Lin Dexi (incluido el enlace: http://blog.csdn.net/lindexi_gd ) debe conservarse y no puede utilizarse con fines comerciales. Las obras modificadas basadas en este artículo deben publicarse bajo la misma licencia. Si tienes alguna pregunta, por favor no dude en contacto .

Supongo que te gusta

Origin www.cnblogs.com/lindexi/p/12717510.html
Recomendado
Clasificación