2010-02-04 3 views
1

Я использую объединенные словари во внешней библиотеке с 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

ответ

1

Хорошо, я думаю, что у меня есть это сейчас. Оказывается, вам нужно ссылаться на ваш файл шрифтов с указанием пути к его сборке. Представьте, что у вас есть отдельная сборка MyResourceAssembly с папкой «Ресурсы». В этой папке находятся 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> 
+0

@ Хенрик. Спасибо за подробный ответ. Сегодня я расскажу об этом позже и дам вам знать, все ли работает. –

+0

Спасибо, как вы объяснили. –

0

EDIT
Игнорировать этот ответ, он работает только тогда, когда все находится в той же сборке.


Я просто попытался это, и это работает для меня . Так я сделал это:

Файл шрифта (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 в том же проекте, он отображается с использованием специального шрифта.

+0

К сожалению о моем преждевременном ответе. Это, очевидно, сложнее, когда вы имеете дело с материалом в отдельных сборках. Но я думаю, что я решил, что мне нужно немного поработать над этим. Я вернусь ... –

Смежные вопросы