【问题标题】:How to use ResourceDictionary as StaticResource in Windows Phone 8如何在 Windows Phone 8 中使用 ResourceDictionary 作为 StaticResource
【发布时间】:2015-04-23 17:40:37
【问题描述】:

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

在应用程序中,我在 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 项目,即 &lt;myNamespace:LocalizedStrings x:Key="LocalizedStrings"/&gt;,当我的应用程序无法编译时,它会抱怨

每个字典条目都必须有一个关联的键。

所以我把代码改成了:

<!--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 资源。有人可以帮忙完成这项工作吗?

顺便说一下,我对值转换器也有同样的问题;如果他们以不同的方式完成,如果有人也能提供帮助,我将不胜感激。

提前致谢。

【问题讨论】:

  • 感谢您提出这个问题,我自己也遇到了确切的问题。

标签: xaml windows-phone-8 resourcedictionary valueconverter


【解决方案1】:

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

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

【讨论】:

  • 我有同样的问题,但这个建议并没有解决我的问题,我做了同样的事情,但错误从未消失
【解决方案2】:
<Application.Resources>
    <ResourceDictionary Source="Assets/Constants.xaml" />
</Application.Resources>

【讨论】:

  • 你能说得更具体些吗?由于您建议的代码不能按原样工作。
  • 代码是正确的,它在这里工作得很好。显然,您遇到的问题与您所描述的不同。
  • 我已经更正了我的问题。看起来只要&lt;myNamespace:LocalizedStrings x:Key="LocalizedStrings"/&gt; 存在,这个问题就存在。
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多