2012-08-09 56 views
4

我目前正在使用MVVMLight框架构建WP7应用程序。我想添加一个资源字典到我的app.xaml,但是当我做它失败。下面是从App.xaml中引用Windows Phone 7中的合并资源字典失败

<Application.Resources> 
    <!--Global View Model Locator--> 
    <vm:ViewModelLocator x:Key="Locator" 
         d:IsDataSource="True" /> 
    <!--Merged Resource Dictionaries--> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="View/StyleResourceDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

一个snipit因为我使用的是有一个键ViewModelLocator,我得到一个错误警告我,我不能有和无钥匙的资源组合。加入一键我的资源字典之后,它看起来如下:

​​

在资源字典我有钥匙“TitleTemplate”风格。无论哪种情况,当我尝试从我的某个视图中引用资源字典时,它都会失败。从我的观点示例代码波纹管:

<TextBlock Name="TB_ContactNameLabel" 
      Text="contact" 
      Style="{StaticResource TitleTemplate}"/> 

设计师马上给我的错误“资源‘TitleTemplate’无法解析”。如果我引用资源字典的关键字(即:resourceDictionary),则不会抛出任何错误,但它不会显式执行任何操作。最后,如果我将resourceDictionary直接添加到其资源中的页面,而不是app.xaml,那么一切正常。我不想将其添加到我打算使用的每个视图中。我在这里错过了什么吗?

回答

8

您的应用程序资源,应该像下面:

<Application.Resources> 
    <!--Global View Model Locator--> 
    <!--Merged Resource Dictionaries--> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="View/StyleResourceDictionary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
     <vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" /> 
    </ResourceDictionary> 
</Application.Resources> 
+0

真棒,这完美地工作。但你能解释为什么会出现这种情况吗? – ferics2 2012-08-09 16:11:53

+0

@ ferics2:如果使用合并字典,资源字典必须是资源属性定义的单根,并且必须在其中定义所有资源。这只是它的工作方式。 – Will 2012-08-09 17:50:17

+0

谢谢@威尔。是的,当添加另一个字典到现有的字典时(合并),则需要将其他资源放入字典中。 – 2012-08-09 22:18:49