合并字典中找不到字体

时间:2010-02-04 11:01:51

标签: silverlight

我在Silverlight 3的外部库中使用合并字典,我在资源文件中定义的样式(styles.xaml)正确应用于我的按钮控件。

我想在我的按钮上应用一种字体,我的字体与我的styles.xaml在同一目录中(在外部dll中,构建操作为资源)。在styles.xaml我有:

<Style  x:Key="MyButtonStyle"
        TargetType="Button">
    <Setter Property="Background"
            Value="#FF1F3B53" />
    <Setter Property="Foreground"
            Value="#FF000000" />
    <Setter Property="Padding"
            Value="3" />
    <Setter Property="BorderThickness"
            Value="1" />
     <Setter Property="FontFamily"
            Value="VINERTIC.TTF#Viner Hand ITC" />

但是,不应用该字体。我已经尝试将字体文件放在App.XAML目录中,但仍未应用。 如果我在样式之外应用字体,那么它可以正常工作。

JD

2 个答案:

答案 0 :(得分:1)

好的,我想我现在已经有了。事实证明,您需要引用您的字体文件以及它所在的程序集的路径。想象一下,您有一个名为MyResourceAssembly的独立程序集,其中包含一个名为Resources的文件夹。在此文件夹中是Assets1.xaml,Assets2.xaml和您的字体文件。所有三个的构建操作都设置为“资源”。在您的应用程序中(我们称之为MyApp),您可以使用App.xaml合并两个资源文件。

Assets2.xaml的内容:

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

    <Style x:Key="DeveloperStyle"
           TargetType="TextBox">

        <Setter Property="FontFamily"
                Value="/MyResourceAssembly;component/Resources/ProggyTiny.ttf#ProggyTinyTT"></Setter>

        <Setter Property="FontSize"
                Value="16"></Setter>

    </Style>

</ResourceDictionary>

这就是你在App.xaml中合并资源词典的方式:

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      x:Class="MyApp">
    <Application.Resources>

        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MyResourceAssembly;component/Resources/Assets1.xaml" />
                <ResourceDictionary Source="/MyResourceAssembly;component/Resources/Assets2.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </Application.Resources>
</Application>

答案 1 :(得分:0)

修改
忽略此回复,仅当所有内容都在同一个程序集中时才有效。


我刚试过这个,,它适用于我。这就是我这样做的方式:

字体文件(ttf)位于应用的根目录。构建操作是“资源”,并且选择“不复制”。

我有一个“资源”文件夹,也位于应用程序的根目录下。在这里我有Assets1.xaml和Assets2.xaml。两者的构建操作都是“资源”,并且选择“不复制”。在Assets1.xaml中,我有一些无关紧要的东西。在Assets2.xaml中,我提出以下内容:

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

    <Style x:Key="DeveloperStyle"
           TargetType="TextBox">

        <Setter Property="FontFamily"
                Value="ProggyTiny.ttf#ProggyTinyTT"></Setter>

        <Setter Property="FontSize"
                Value="16"></Setter>

    </Style>

</ResourceDictionary>

在App.xaml中我这样做(请注意我为我的应用程序使用了基类,但这应该没有区别):

<base:BaseApplication xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                      xmlns:base="clr-namespace:GLS.Gui.Controls.Base;assembly=GLS.Gui.Controls"
                      x:Class="GLSTestApp02.App"
                      xmlns:sys="clr-namespace:System;assembly=mscorlib"
                      xmlns:h="clr-namespace:GLS.Gui.Helper;assembly=GLS.Gui.Helper">
    <base:BaseApplication.Resources>

        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/Assets1.xaml" />
                <ResourceDictionary Source="Resources/Assets2.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

    </base:BaseApplication.Resources>
</base:BaseApplication>

当我将样式应用于同一项目中的TextBox时,它会使用自定义字体显示。