nuget 中的 UWP 样式和主题找不到资源文件
UWP styles and themes in a nuget cannot find resource file
我有一个 UWP 项目和一个用于主题词典的 class 库和一些控件默认样式全部合并到一个名为 "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
我还尝试为 ResourceDictionary "Themes.xaml" 添加一个带有 "InitializeComponent()" 的空代码隐藏文件,当我按照下面显示的方式导入时它工作得很好,但它再次只在我引用时工作项目,不适用于 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 编译器的异常警告。
所以现在我有了那个 nuget 项目的代码以及几乎是空的示例应用程序,可以随意从项目中引用,然后也尝试从 nuget 包中引用。
项目url:https://github.com/touseefbsb/UWP_Styles_Nuget
nuget 包 : https://www.nuget.org/packages/GI.UI/0.0.16
我还在用于创建包的项目中提供了 nusepc 文件。
备注
当我创建 nuget 文件时,我收到以下警告
你可以尝试这样使用:
<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"
我能够按照如下所示的文件夹结构解决问题:
然后按以下方式编辑 nuspec 文件:
我有一个 UWP 项目和一个用于主题词典的 class 库和一些控件默认样式全部合并到一个名为 "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
我还尝试为 ResourceDictionary "Themes.xaml" 添加一个带有 "InitializeComponent()" 的空代码隐藏文件,当我按照下面显示的方式导入时它工作得很好,但它再次只在我引用时工作项目,不适用于 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 编译器的异常警告。
所以现在我有了那个 nuget 项目的代码以及几乎是空的示例应用程序,可以随意从项目中引用,然后也尝试从 nuget 包中引用。
项目url:https://github.com/touseefbsb/UWP_Styles_Nuget
nuget 包 : https://www.nuget.org/packages/GI.UI/0.0.16
我还在用于创建包的项目中提供了 nusepc 文件。
备注
当我创建 nuget 文件时,我收到以下警告
你可以尝试这样使用:
<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"
我能够按照如下所示的文件夹结构解决问题:
然后按以下方式编辑 nuspec 文件: