我创建了一个新的 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
Referencing a merged resource dictionary in windows phone seven failing
答案 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的代码,它们没有这些问题。