2016-01-10 27 views
0

我尝试创建一个具有包含不同视图的主窗口的通用Windows应用程序。Universal App Resource resw values in different views

ContentFrame.Navigate(typeof(SimplePage)); 

其中ContentFrame是XAML帧和SimplePage是一个视图。

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

我想在SimplePage视图中使用resw-文件中的字符串。所以我想:

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

我也用ResourceContext.GetForViewIndependentUse()代替ResourceContext.GetForCurrentView()尝试,但尝试调试时,我总是得到NullReferenceException

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

在这里,在Visual Studio中的解决方案的截图:

Solution

+0

你的资源文件中有“dataToolDiameter”吗?如果您的德语区域设置为“德语”,则需要搜索德文件夹下的“资源”文件。 – Jackie

+0

是的,资源被正确定义。当我在主窗口中使用相同的语句时,只有当我想在子视图中使用它时,才会出现此错误。 – daengl

回答

1

如果你有一个单一的项目解决方案,我建议你要么建立一个Shell - 作为微软例如建议,或者为了本地化目的使用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"); 

请注意:只要您在项目中使用默认模式进行本地化,就可以工作。如果你使用不同的资源文件,你会使用构造函数的超载。

+0

你能否给我一个微软例子的链接?我无法找到它。 “App()”是否必须是“静态”?默认情况下它是公开的,如果我改变它为静态我会得到错误。 – daengl

+0

@daengl这个例子是MVA视频的一部分。您可以通过查看Universal Windows Apps的入门指南来找到它。你不应该改变类的声明,你必须引入一个静态构造函数,作为答案中的代码示例(和注释)。 – Herdo

+0

谢谢,伙计们。我对MVA一无所知。 – daengl

相关问题