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

时间:2017-11-14 11:32:36

标签: 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>

在我的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>

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

<Setter Property="Foreground" Value="{StaticResource TopMenuTextBrush}" />

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

  
      
  • 异常{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之前使用了相同的方法,所以我认为它可能与应用程序部署有关。

非常感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

  

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

问题是您使用了错误的ResourceDictionary来源。我发现Resources.xaml和其他xaml文件存储在屏幕截图中的同一级目录中。因此,您无法在源中声明这些xaml文件的父目录。请修改ResourceDictionary,如下所示

<ResourceDictionary Source="Colors.xaml"/>

有关详情,请参阅ResourceDictionary and XAML resource references