所以我在另一个程序集中有一个资源字典。它看起来像这样:
<ResourceDictionary
Source="ms-appx:///MyStuff.UI.Common/Styles/Shared.xaml" />
我正在尝试删除项目引用并使用nuget包添加引用。在我这样做之后,我得到以下运行时错误:
Failed to assign to property 'Windows.UI.Xaml.ResourceDictionary.Source' because the type 'Windows.Foundation.String' cannot be assigned to the type 'Windows.Foundation.Uri'. [Line: 12 Position: 37]
如何在一个单独的程序集中将此资源字典合并到一个nugget包中?我认为没有区别。
答案 0 :(得分:0)
XAML Merged Dictionaries比它们看起来更棘手。如果您引用本地项目,那么一切都很好,然后您的ResourceDictionary Source =路径。
如果您正在引用外部DLL(不在解决方案中),引用的DLL文件夹也必须包含所有* .xml,* .xr.xml,* .xbf,* .jpg / png / gif等。< / p>
当我将解决方案项目迁移到外部DLL引用时,我有主要 Source = Uri语法问题。另外,我引用的DLL文件夹没有正确文件夹中的所有资源文件。
我遵循的程序是:1。引用DLL包含合并的词典(XAML样式表)。 2.确保参考路径包含所有必需文件。 3.将合并的字典引用添加到App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///NAMESPACE_HERE/Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
这个PostBuild.bat文件描述了我如何在成功构建时复制所有必需的文件:
Echo Starting: PostBuildEvent: Call $(ProjectDir)PostBuild.Bat $(ProjectDir) $(OutDir) $(TargetPath) $(RootNameSpace)
Echo With Parameters: %1 %2 %3 %4
REM ***
REM *** Variables
REM ***
SET BuildLocationBin=..\..\..\..\..\..\..\..\bin
REM ***
Echo *** Publish to Bin
REM ***
MD %BuildLocationBin%
%WINDIR%\system32\attrib.exe %BuildLocationBin%\*.* -r /s
%WINDIR%\system32\xcopy.exe %1Properties\*.rd.xml %BuildLocationBin%\%4\Properties\*.* /s/r/y
%WINDIR%\system32\xcopy.exe %1%2*.png %BuildLocationBin%\%4\*.* /s/r/y
%WINDIR%\system32\xcopy.exe %1%2*.xbf %BuildLocationBin%\%4\*.* /s/r/y
%WINDIR%\system32\xcopy.exe %1%2*.xml %BuildLocationBin%\%4\*.* /s/r/y
%WINDIR%\system32\xcopy.exe %3 %BuildLocationBin%\*.* /s/r/y
%WINDIR%\system32\xcopy.exe %1%2*.pri %BuildLocationBin%\*.* /s/r/y
Echo *** Postbuild Complete ***
希望这有帮助!