如何在Windows Phone 8中将ResourceDictionary用作StaticResource

时间:2012-12-28 09:10:49

标签: xaml windows-phone-8 resourcedictionary valueconverter

我有一个Windows Phone 7应用程序,我正在尝试创建它的Windows Phone 8版本。

在app中,我在XAML文件中定义了一个ResourceDictionary:

<ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib">

    <sys:String x:Key="AppName">My App Name</sys:String>
    <!-- etc. -->

</ResourceDictionary>

此ResourceDictionary在App.xaml中引用为:

<!--Application Resources-->
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets/Constants.xaml"/>
            <!-- etc. -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

然后很容易做到:

<TextBlock x:Name="ApplicationTitle" Text="{StaticResource AppName}"/>

以上内容适用于Windows Phone 7,但是,在Windows Phone 8中还有一个Application.Resources<myNamespace:LocalizedStrings x:Key="LocalizedStrings"/>,当我有我的应用程序时,它没有编译,因为它抱怨< / p>

  

每个词典条目必须具有关联的密钥。

所以我改为代码:

<!--Application Resources-->
<Application.Resources>
    <myNamespace:LocalizedStrings x:Key="LocalizedStrings"/>
    <ResourceDictionary x:Key="MainDictionary">
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Assets/Constants.xaml"/>
            <!-- etc. -->
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

现在我有另一个问题。我的应用程序编译但是当它运行时会抛出XamlParseException

  

无法找到名称/密钥AppName的资源

这一切都是因为LocalizedStrings资源而发生的。有人可以帮助完成这项工作吗?

顺便说一句,我对Value Converters也有同样的问题;如果他们以不同的方式完成,我很感激,如果有人也可以提供帮助。

提前致谢。

2 个答案:

答案 0 :(得分:7)

将本地化字符串条目移动到顶级应用程序资源字典中。

<!--Application Resources-->
<Application.Resources>
        <ResourceDictionary x:Key="MainDictionary">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Assets/Constants.xaml"/>
                <!-- etc. -->
            </ResourceDictionary.MergedDictionaries>
            <myNamespace:LocalizedStrings x:Key="LocalizedStrings"/>
        </ResourceDictionary>
</Application.Resources>

答案 1 :(得分:0)

<Application.Resources>
    <ResourceDictionary Source="Assets/Constants.xaml" />
</Application.Resources>