【问题标题】:Referencing a merged resource dictionary in windows phone seven failing在 Windows Phone 7 中引用合并的资源字典失败
【发布时间】:2012-08-09 15:25:14
【问题描述】:

我目前正在使用 MVVMLight 框架构建一个 WP7 应用程序。我想将资源字典添加到我的 app.xaml,但是当我这样做时会失败。这是来自 app.xaml 的片段

<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>

因为我使用的是具有键的 ViewModelLocator,所以我收到一条错误消息,警告我不能混合使用和不使用键的资源。在我的资源字典中添加一个键后如下所示:

    <ResourceDictionary x:Key="resourceDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="View/StyleResourceDictionary.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

在资源字典中,我有一个带有键“TitleTemplate”的样式。在任何一种情况下,当我尝试从我的一个视图中引用资源字典时,它都会失败。我认为的示例代码如下:

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

设计师立即给我错误“资源'TitleTemplate'无法解析”。如果我引用资源字典的键(即:resourceDictionary),则不会引发错误,但它显然没有做任何事情。最后,如果我将 resourceDictionary 直接添加到其资源中的页面,而不是 app.xaml,一切正常。我不想将它添加到我计划使用的每个视图中。我在这里遗漏了什么吗?

【问题讨论】:

    标签: windows-phone-7 xaml mvvm-light resourcedictionary


    【解决方案1】:

    您的应用程序资源应如下所示:

    <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>
    

    【讨论】:

    • 太棒了,效果很好。但是你能解释一下为什么会这样吗?
    • @ferics2:如果使用合并字典,则资源字典必须是 Resources 属性定义的单一根,并且必须在其中定义所有资源。这就是它的工作方式。
    • 谢谢@Will。是的,当将另一个字典添加到现有字典(合并)时,需要将其他资源放入字典中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 2011-01-17
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多