Wpf字体样式在RunTime中不起作用,并且在“设计时”中未显示我的字体的正确视图

时间:2015-02-10 13:57:23

标签: c# wpf fonts resources wpf-style

我使用单独项目作为我的样式a,我有一些代码如下:

<ResourceDictionary
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    >

    <Style x:Key="NazaninFont"  TargetType="Control">
        <Setter Property="FontFamily" Value="pack://application:,,,/Extra/Fonts/#IRNazanin"/>
    </Style>

    ......

</ResourceDictionary> 

当我在这样的元素中使用我的样式键时,我的另一种样式(如控制效果和......)效果很好:

Style="{ms:MyStyleRef ResourceKey=MyStyleKey}"

但是当我在 Lable 元素

中使用以下代码时
<Label Style="{ms:MyStyleRef ResourceKey=NazaninFont}" x:Name="LabelRemainingSec" Content="{Binding RemainingSec}"/>

我有:

  • 在设计时&gt;&gt; FontFamily在属性面板上的 IRNazanin 上设置,但在设计器中没有更正字体视图

BUT

  • 在运行时&gt;&gt; FontFamily设置在 Tahoma (窗口字体)

我也是这样测试的:

我在单独的项目中添加了一个基于我的字体样式的样式,在我的窗口顶部,如下所示:

<Style x:Key="NazaninFont" BasedOn="{ms:MyStyleRef ResourceKey=NazaninFont}" TargetType="Label"/>

然后我在我的Lable normaly中使用它:

<Label Style="{StaticResource NazaninFont}" x:Name="LabelRemainingSec" Content="{Binding RemainingSec}"/>

结果与以前的方式相同:

Design Time中的FontFamily位于 IRNazanin 上,并且在XAML设计器中没有更正字体视图!在Run Time中,它位于 Tahoma

您如何看待我的问题?我认为我的样式无法正确地给出Label控件的字体路径。

1 个答案:

答案 0 :(得分:0)

这可能是也可能不是你所追求的,但我会猜测它是:p

您可以在资源字典中定义FontFamily资源,也可以在任何您想要的地方定义。请注意我在Window.Resources中如何定义它。

我已将项目中的物理字体文件包含在名为“fonts”的文件夹中(不需要打包),并使用字体名称:值引用它。通过双击字体文件(显示整堆演示文本和安装选项)可以找到它。 您不使用文件本身的名称,在引用时使用字体名称:值。另外,不要忘记任何字体引用开头的#! :)

然后,像对待任何其他字体系列资源一样调用它

两个标签都是不同的字体。请注意,遗憾的是,在设计期间,只有在运行时才会看到字体更改。

工作代码作为演示:

<Window x:Class="Tinker.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="400" Width="500">
    <Window.Resources>
        <FontFamily x:Key="MyFont">fonts/#Roboto Thin</FontFamily> 
    </Window.Resources>
    <StackPanel VerticalAlignment="Top">
        <Label FontSize="36" Content="Helloooooo World!"/>
        <Label FontSize="36" FontFamily="{StaticResource MyFont}" Content="Helloooooo World!"/>
    </StackPanel>
</Window>