如果我们使用StaticResource或DynamicResource,如何在pt中设置FontSize?

时间:2011-05-06 05:10:13

标签: wpf

目前我使用fontsize资源作为

 <sys:Double x:Key="FontSize13">13</sys:Double>
<sys:Double x:Key="FontSize12">12</sys:Double>
<sys:Double x:Key="FontSize11">11</sys:Double>

并使用

        <Setter Property="FontSize"
            Value="{DynamicResource FontSize13}" />

如何将FontSize设置为10pt而不是像素?

3 个答案:

答案 0 :(得分:8)

类型转换在编译时由XAML编译器发生,特别是响应FontSizeConverter属性的FontSize,因此我们遇到了使转换器运行的基本问题。但是我们可以创建一个帮助标记扩展来完成这项工作。

以下是XAML的样子:

<Grid>
    <Grid.Resources>
        <local:FontSize Size="20" x:Key="TwentyPixels"/>
        <local:FontSize Size="11pt" x:Key="ElevenPoint"/>
    </Grid.Resources>
    <StackPanel>
        <TextBlock Text="Sample text" FontSize="{StaticResource TwentyPixels}"/>
        <TextBlock Text="Sample text" FontSize="{StaticResource ElevenPoint}"/>
    </StackPanel>
</Grid>

这是标记扩展名:

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

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

答案 1 :(得分:0)

只需在数字和&#34; pt&#34;之间使用空格。例如:

<Style TargetType="TextBlock">
    <Setter Property="FontFamily" Value="Segoe UI"/>
    <Setter Property="FontSize" Value="11 pt"/>
</Style>

答案 2 :(得分:-2)

刚刚将资源从Double更改为String并包含单位说明符

<sys:String x:Key="FontSize13">13pt</sys:String>