UWP - 来自不同样式资源字典的引用 StaticResource:无法分配给属性“Windows.UI.Xaml.ResourceDictionary.Source”

ivk*_*vke 3 c# xaml uwp windows-10-universal uwp-xaml

你好,我的团队和我最近开始开发一个 win10 uwp 应用程序。应用程序将有很多视图和组件,因此预计会大量使用样式,因此我们需要通过文件/文件夹结构来组织我们的样式,我们使用以下结构(不幸的是,我无法嵌入图像,请参阅链接):

https://i.stack.imgur.com/XvW0u.png

无论如何,我的 Resource.xaml 将所有其他字典合并如下:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="/Resources/Colors.xaml" />
        <ResourceDictionary Source="/Resources/Icons.xaml" />
        <ResourceDictionary Source="/Resources/Fonts.xaml" />
        <ResourceDictionary Source="/Resources/Converters.xaml" />
        <ResourceDictionary Source="/Resources/Buttons.xaml" />
        <ResourceDictionary Source="/Resources/RadioButton.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)

在我的 App.xaml 中,我引用了这本词典:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/Resources.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
    </ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

现在我设法在 RadioButton.xaml 中找到了问题的根源,我使用 StaticResource 查找引用了 Colors.xaml 中定义的画笔:

<Setter Property="Foreground" Value="{StaticResource TopMenuTextBrush}" />
Run Code Online (Sandbox Code Playgroud)

如果我删除这一行,一切都会开始,但我得到以下异常:

  • 异常 {Windows.UI.Xaml.Markup.XamlParseException:找不到与此错误代码关联的文本。

无法分配给属性“Windows.UI.Xaml.ResourceDictionary.Source”,因为无法将“Windows.Foundation.String”类型分配给“Windows.Foundation.Uri”类型。[行:28 位置:37]} System.Exception {Windows.UI.Xaml.Markup.XamlParseException}

有趣的是,当我用这一行注释启动应用程序并取消注释它时,visual studio 将识别画笔并正确应用它,它只会在应用程序启动时中断。我们之前在开发 WPF 时使用了相同的方法,所以我认为这可能与应用程序部署有关。

非常感谢所有帮助。

Nic*_*SFT 5

异常 = {Windows.UI.Xaml.Markup.XamlParseException:找不到与此错误代码关联的文本。

问题是您使用了错误的ResourceDictionary来源。我Resources.xaml在您的屏幕截图中找到了存储在同一级别目录中的 xaml 文件和其他 xaml 文件。因此,您无法在源代码中声明这些 xaml 文件的父目录。请像下面这样修改ResourceDictionary

<ResourceDictionary Source="Colors.xaml"/>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以参考ResourceDictionary 和 XAML 资源参考