【问题标题】:Universal App Resource resw values in different views不同视图中的通用应用资源 resw 值
【发布时间】:2016-01-11 16:58:08
【问题描述】:

我尝试创建一个具有包含不同视图的主窗口的通用 Windows 应用程序。

ContentFrame.Navigate(typeof(SimplePage));

ContentFrame 是 XAML 框架,SimplePage 是视图。

该项目有两个本地化。因此我在解决方案中创建了一个文件夹Strings,其中包含两个文件夹ende,每个文件夹都包含一个Resources.resw 文件。

我想使用 SimplePage 视图中 resw 文件中的字符串。因此我尝试了:

tbSimpleInput1.Text = ResourceManager.Current.MainResourceMap.GetValue("Resources/dataToolDiameter", ResourceContext.GetForCurrentView()).ValueAsString;

我也尝试过使用ResourceContext.GetForViewIndependentUse() 而不是ResourceContext.GetForCurrentView(),但在尝试调试时总是得到NullReferenceException

在不同视图中访问资源的正确方法是什么?

这是 Visual Studio 中解决方案的屏幕截图:

【问题讨论】:

  • 您的资源文件中有“dataToolDiameter”吗?如果您的语言环境设置为德国,则需要在 de 文件夹下搜索 Resources 文件。
  • 是的,资源定义正确。当我在主窗口中使用相同的语句时它可以工作,只有当我想在子视图中使用它时才会出现此错误。

标签: localization uwp


【解决方案1】:

如果您有一个单一项目的解决方案,我建议您创建一个 Shell - 正如 Microsoft 示例所建议的那样,或者使用 App.xaml.cs 类进行本地化。

首先,在任一类的构造函数中,获取当前的ResourceLoader

// E.g use the static constructor of your App class
static App()
{
    _resourceLoader = new ResourceLoader();
}

现在获取资源(例如文本)非常容易:

public static string GetLocalizedString(string key)
{
    return _resourceLoader.GetString(key);
}

现在您可以从默认资源字典中加载字符串:

tbSimpleInput1.Text = App.GetLocalizedString("dataToolDiameter");

请注意:这仅适用于您在项目中使用默认模式进行本地化。如果您使用不同的资源文件,您将使用 ResourceLoader 构造函数的重载。

【讨论】:

  • 能否给我一个 Microsoft 示例的链接?我没能找到它。 App() 必须是 static 吗?默认情况下它是公共的,如果我将它更改为静态我会得到错误。
  • @daengl 该示例是 MVA 视频的一部分。您可以通过查看通用 Windows 应用程序的入门指南找到它。您不应更改类声明,您必须引入一个静态构造函数,正如答案中的代码示例(和注释)所建议的那样。
  • 谢谢,伙计们。我对 MVA 一无所知。
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多