Стили и темы UWP в nuget не могут найти файл ресурсов - PullRequest
0 голосов
/ 17 марта 2020

У меня есть проект UWP и библиотека классов для словаря тем, и некоторые стили по умолчанию для элементов управления объединены в один файл с именем «Themes.xaml», и я ссылаюсь на этот проект и просто импортирую его в «app.xaml» следующим образом:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="GI.UI/Themes.xaml" />
            <ResourceDictionary Source="/Styles/_FontSizes.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

, и он работает, как и ожидалось, но когда я создаю nuget с тем же проектом стилей и использую его вместо этого, то проект выдает исключение, он не может найти Themes.xaml по этому пути.

Обновление 1

Я также попытался добавить пустой код позади файла с помощью InitializeComponent () для ResourceDictionary «Themes.xaml», и он отлично работает, когда я импортирую, как показано ниже, но снова это работает только когда я ссылаюсь на проект и не работает с nuget.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <theme:Themes />
            <ResourceDictionary Source="/Styles/_FontSizes.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

(Themes.xaml.cs) Код словаря ресурсов позади.

using Windows.UI.Xaml;

namespace GI.UI
{
    public sealed partial class Themes : ResourceDictionary
    {
        public Themes() => InitializeComponent();
    }
}

Themes.xaml

<ResourceDictionary
x:Class="GI.UI.Themes"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:BelowWindows10version1809="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract, 7)"
xmlns:Windows10version1809="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<!-- some styles and themes here -->
</ResourceDictionary>

Обновление 2

Заметил это предупреждение об исключении компилятором xaml.

enter image description here

Так что теперь у меня есть код этого проекта Nuget t вместе с почти пустым примером приложения, не стесняйтесь ссылаться на него из проекта, а затем попробуйте ссылаться и из пакета nuget.

url проекта : https://github.com/touseefbsb/UWP_Styles_Nuget

пакет nuget : https://www.nuget.org/packages/GI.UI/0.0.16

Я также предоставил файл nusep c в проекте, который я использовал создать пакет.

Примечание

При создании файла nuget появляется следующее предупреждение

enter image description here

enter image description here

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Мне удалось решить проблему, следуя структуре папок, как показано ниже:

enter image description here

, а затем отредактировав файл nuspe c, следующий путь:

enter image description here

1 голос
/ 17 марта 2020

Вы можете попробовать использовать вот так:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///GI.Standards.Theme/Theme.xaml" />
            <ResourceDictionary Source="/Styles/_FontSizes.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Используя ms-appx для ссылки на файл, который приходит из пакета вашего приложения.

Source="ms-appx:///LibraryName/Folder/File.xaml"
...