Как использовать ресурсы (шрифты, изображения, стили) из внешней библиотеки - PullRequest
0 голосов
/ 21 февраля 2020

У меня проблемы с загрузкой ресурсов (изображений, семейств шрифтов, стилей) из внешнего ресурса dll. Я хотел бы иметь все ресурсы (изображения, шрифты, стили ...) в одном dll ресурса и установить их доступность для всех проектов (библиотек) в этом решении. Эти проекты в решении - это разные библиотеки, на которые ссылается и вызывает основное приложение.

До сих пор я пробовал несколько разных предложений, как это сделать, но ни одна из них не работала. Я использую Visual Studio 2019 и компилирую для. net 4.6.2 - если это что-то значит ...

Сначала я создал библиотеку ресурсов под названием myapp.resources. Внутри этого проекта у меня есть папка с именем Fonts, а внутри этой папки находится шрифт Lato-Thin.

Также в root проекта я создал словарь ресурсов под названием Fonts.xaml

-Project -Fonts -Lato-Thin.ttf -Fonts.xaml

структура Fonts.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:myapp.resources">

    <FontFamily x:Key="LatoThin">Fonts/#Lato Thin</FontFamily>    
</ResourceDictionary>

В основном приложении App.xaml я добавил загрузку этого ResourceDictionary:

<ResourceDictionary x:Key="Dict">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/myapp.resources;component/Fonts.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

Последний шаг - добавление этой семьи шрифтов к элементу управления метками:

<Label Grid.Row="0" Grid.Column="0" Content="some random text for test" FontFamily="{StaticResource ResourceKey=LatoThin}"/>

Но я всегда получаю сообщение об ошибке, что ресурс шрифта LatoThin не может быть найден.

Та же ошибка, которую я получаю с любым другим типом ресурса, таким как изображения, стили.

Конечно, я добавил ссылки на проекты, и каждый файл находится там, где он должен быть.

Единственное работает, например, добавление изображения к кнопкам таким образом.

<syncfusion:ButtonAdv x:Name="btnSelectFile" 
                              Grid.Row="1" Grid.Column="2"
                              VerticalAlignment="Center" SizeMode="Small"
                              Height="26" Width="26" Label="Button" Margin="3,3,3,3"
                        SmallIcon="pack://application:,,,/myapp.resources;component/Images/add.png"/>

Я пытался найти несколько полных уроков, которым нужно следовать, но у меня всегда одна и та же ошибка.

Итак, мой вопрос будет: как это решить?

Спасибо за любой совет.

1 Ответ

0 голосов
/ 21 февраля 2020

Убедитесь, что для файла шрифта (Lato-Thin.ttf) задано действие сборки, равное Resource.

В вашем файле Fonts.xaml обязательно используйте этот формат:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:myapp.resources">

    <FontFamily x:Key="LatoThin">/myapp.resources;component/Fonts/#Lato Thin</FontFamily>

</ResourceDictionary>

Совет. Вы можете удалить pack://application:,,, из URI, чтобы сделать их короче.

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