在Windows Phone 8项目中找不到具有名称/密钥的资源

时间:2016-10-18 11:44:32

标签: c# xaml silverlight windows-phone-8 windows-phone

我创建了一个新的 Windows Phone 8(Silverlight)项目。 添加了主题文件夹,在此文件夹中添加了两个资源词典,一个包含 solidcolorbursh ,另一个包含 colors

我在App.xaml

中合并了这两个资源词典

在MainPage.xaml中,我使用了一个solidcolorbursh来处理网格背景。

CODE SNIPPETS:

App.xaml中:

 <Application.Resources>
        <ResourceDictionary x:Key="mainStyle">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/resTest;component/Themes/MyColors.xaml"></ResourceDictionary>    
                <ResourceDictionary Source="/resTest;component/Themes/MyStyles.xaml"></ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
            <local:LocalizedStrings xmlns:local="clr-namespace:resTest" x:Key="LocalizedStrings"/>    
        </ResourceDictionary>           
    </Application.Resources>

MainPage.xaml中:

<Grid x:Name="LayoutRoot" Background="{StaticResource RedSolidColorBrush}">
</Grid>

MyColors.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    mc:Ignorable="d">

    <Color x:Key="RedColor">#FFFF0000</Color>
</ResourceDictionary>

MyStyles.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    mc:Ignorable="d">

    <SolidColorBrush x:Key="RedSolidColorBrush" Color="{StaticResource RedColor}"></SolidColorBrush>
</ResourceDictionary>

抛出异常:

  

块引用

     System.Windows.ni.dll中的

'System.Windows.Markup.XamlParseException'   它显示运行时错误:

     

抛出异常:'System.Windows.Markup.XamlParseException'中   System.Windows.ni.dll

     

其他信息:无法找到名称/密钥的资源   RedColor [Line:14 Position:44]

我哪里错了?

参考 https://msdn.microsoft.com/en-us/library/cc903952(VS.95).aspx

https://joshsmithonwpf.wordpress.com/2010/09/24/consuming-resources-from-external-assemblies-in-silverlight-4/

Referencing a merged resource dictionary in windows phone seven failing

2 个答案:

答案 0 :(得分:0)

您需要能够MyColors.xaml看到MyStyles.xaml,否则无法找到RedColor的定义。

如果您在MyStyles.xaml中包含以下内容:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="...";component/MyColors.xaml" />
</ResourceDictionary.MergedDictionaries>

其中&#34; ...&#34;是MyColors.xaml的路径,那么你应该可以参考其中定义的颜色。

虽然你已经在App.xaml中合并词典应该会产生相同的效果。如果您确实要更改MyStyles.xaml以包含MyColors.xaml,则应从MyColors.xaml删除对App.xaml的引用。

答案 1 :(得分:0)

首先: 如果ResourceDictionary文件的构建操作设置为Resource,则可以通过以下方式引用它:

/<assembly name>;component/<resource file path>

如果构建操作设置为Content,则可以通过以下方式引用它:

/<resource file path>

然后: 我们需要在MyStyles中合并MyColors。 谢谢你@ChrisF

实际上我已经习惯了Windows Phone 8.1或UWP的代码,它们没有这些问题。