出于某种原因,以下代码给了我一个例外。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/PPCa.Common.Infrastructure;component/Skins/Default.xaml"/>
<ResourceDictionary>
<app:ResourceWrapper x:Key="ResourceWrapper" />
<app:NotOperatorValueConverter x:Key="NotOperatorValueConverter" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
以下是例外:
System.Windows.Markup.XamlParseException occurred
Message=Failed to assign to property 'System.Windows.ResourceDictionary.Source'. [Line: 11 Position: 44]
LineNumber=11
LinePosition=44
StackTrace:
at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
InnerException:
第11行是这样的:
<ResourceDictionary Source="/PPCa.Common.Infrastructure;component/Skins/Default.xaml"/>
我是否错误地合并了我的词典?
答案 0 :(得分:9)
为什么没有人回答我的问题?我被列入黑名单或其他什么。人们过去经常帮助我。无论如何,我发现了我的问题。唯一的例外是红鲱鱼。该问题与我的应用程序资源定义无关。我在资源词典中深入研究的问题。我合并引用了字典中不再存在的字典。这很难搞清楚。
答案 1 :(得分:4)
这些词典是否在同一个XAP中?如果是这样,相对路径应该起作用。我已经使用了所有相对路径来合并字典而没有任何问题。以下是我的一个例子:
<Application.Resources>
<ResourceDictionary x:Name="appDictionary">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="ControlStylesDictionary"
Source="Resources/Styles/ControlStyles.xaml" />
<ResourceDictionary x:Name="MenuStylesDictionary"
Source="Resources/Styles/MenuStyles.xaml" />
</ResourceDictionary>
</Application.Resources>
这是我在你的XAML中可以看到的唯一区别。
答案 2 :(得分:3)
如果字典在另一个XAP中,则需要download the XAP and load the dictionary从那里开始。
答案 3 :(得分:1)
我遇到了同样的问题,同样的通用错误信息并找到了解决方案。这似乎是一个错误恕我直言。
我正在为.Net,SL5,WP7.1构建应用程序。为此,我将代码放在.Net应用程序中,并为其他项目添加源链接。效果很好。
我的主要应用项目名为MyApp.Net,MyApp.SL和MyApp.WP。但是,我只为MyApp创建这些项目的默认命名空间和项目输出。再次,它应该工作得很好。
我将资源放在项目MyApp.Resources.Net,MyApp.Resources.SL和MyApp.Resources.WP中。由于Expression Blend希望直接访问物理文件并且(例如)MyApp.Resources.WP项目包含指向MyStyles.xaml文件的源链接,因此使用VS源链接会有一些小故障。 MyApp.Resources.Net项目。因此,我的所有资源项目实际上都包含物理文件。这也可以,我只需要手动同步文件。到目前为止没问题。
但是,对于我的资源项目,我将命名空间和输出文件更改为MyApp.Resources。这使我的应用程序代码也变得简单,无论它是为其构建的平台,命名空间都是相同的。
是的,我知道这有点复杂,但它允许我构建3个平台(技术上,如果你包括Blendability和UnitTesting),所有平台都具有相同的代码库。
要继续,如果我创建一个ResourceDictionary
<ResourceDictionary Source="/MyApp.Resources;component/Styles/TextStyles.xaml"/>
我无法分配属性'System.Windows.ResourceDictionary.Source'等...
简而言之,我发现如果程序集名称包含'。'出现此错误。例如,如果我将项目名称更改为“资源”,则可以正常工作。或者,如果我使用默认构建名称“MyApp.Resources.WP”保留我的项目,它也可以正常工作。
这与更改我的资源dll输出文件名无关,我整天更改它们并且效果很好,但如果它们包含'。'我得到了上述错误。例如,我可以将输出名称更改为“MyAppResourceThatWorks”(将项目名称保留为MyApp.Resources.WP并将其加载到App.xaml中
<ResourceDictionary Source="/MyAppResourceThatWorks;component/Styles/TextStyles.xaml"/>
效果很好。将输出名称更改为“MyAppResourcesThatDoNot.Work”并使用
加载它<ResourceDictionary Source="/MyAppResourceThatDoNot.Work;component/Styles/TextStyles.xaml"/>
失败。
是的,我尝试更改装配属性等等。这是Pack Uri的加载问题。