Шрифт не найден в словаре слияния - PullRequest
1 голос
/ 04 февраля 2010

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

1 голос
/ 05 февраля 2010

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

РЕДАКТИРОВАТЬ
Игнорировать этот ответ, он работает, только если все в одной сборке.


Я только что попробовал, и это работает для меня .Вот как я это сделал:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...