WinUI XAML:使用来自另一个项目的 ResourceDictionary

Posted

技术标签:

【中文标题】WinUI XAML:使用来自另一个项目的 ResourceDictionary【英文标题】:WinUI XAML: Using a ResourceDictionary from another project 【发布时间】:2022-01-09 20:56:15 【问题描述】:

在我的 WinUI 3 应用程序中,我尝试使用位于另一个项目中的 ResourceDictionary。

假设引用的项目是ResourceTestLib,这个库项目有一个文件夹“Styles”,其中有一个文件“_Thickness.xaml”。

在主应用程序的app.xaml 文件中,我在“此处的其他合并字典”注释下方尝试了这两种方法,但它们似乎都不起作用,即应用程序在启动时崩溃并显示“无法找到资源”消息....”消息。

这是我的 app.xaml:

<Application.Resources>
    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>
            <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />

            <!-- Other merged dictionaries here -->
            <ResourceDictionary Source="/ResourceTestLib;component/Styles/_Thickness.xaml"/>
            <ResourceDictionary Source="pack://application:,,,/ResourceTestLib;component/Styles/_Thickness.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>
</Application.Resources>

当我将鼠标悬停在相应的行上时,Visual Studio 会为第一个引用的ResourceDictionary 显示一个工具提示,其中包含“找不到路径 X”和“路径中的无效字符”(可能是因为“应用程序:,,”)第二个消息。

我认为 WinUI XAML 在这方面可能与 WPF XAML 不同?甚至还不支持?

【问题讨论】:

Windows 应用 SDK 具有类似 UWP 的 XAML 而不是类似 WPF。然后使用“uwp”关键字找到问题的解决方案。这可能会有所帮助***.com/q/44509715/12888024 谢谢,相关帖子中的这种语法有效:Source="ms-appx:///ClassLibrary1/Styles/Custom.xaml" 【参考方案1】:

Pack URI 仅在 WPF 中使用。

UWP 和 Win UI 使用 ms-appx URI 方案来引用驻留在另一个程序集中的文件,所以试试这个:

 <ResourceDictionary Source="ms-appx:///ResourceTestLib/Styles/_Thickness.xaml" />

更多关于 UWP 风格的 URI 方案:

https://docs.microsoft.com/en-us/windows/uwp/app-resources/uri-schemes

【讨论】:

以上是关于WinUI XAML:使用来自另一个项目的 ResourceDictionary的主要内容,如果未能解决你的问题,请参考以下文章

WinUI 3 XAML DataTemplate - 如何包含由用于绑定的类公开的控件

如何更改 NavigationViewItem 选择下划线的长度以匹配 WinUI3 应用程序中的项目内容文本?

winui中创建自定义控件库的正确方法

列表视图来自另一个列表视图中选择的对象的项目

如何使用来自不同 xaml 文件的样式

北京WINUI外包团队:长期开发各类基于WINUI框架应用项目