我使用resw文件在我的应用程序中存储文字字符串,然后使用
访问它们(new Windows.ApplicationModel.Resources.ResourceLoader()).GetString("resourceName");
我发现这有点麻烦,并希望有一个全局资源加载器,例如在静态类中:
public static class ResourceLoader
{
private static Windows.ApplicationModel.Resources.ResourceLoader loader = new Windows.ApplicationModel.Resources.ResourceLoader();
public static string Get(string name)
{
return loader.GetString(name);
}
}
这样我只有一个ResourceLoader实例,并且很容易访问。是否有任何反对这样做的事情?它似乎适用于我的应用程序,但我不想错过这里的任何内容。
答案 0 :(得分:1)
使用全局ResourceLoader没有记录的缺点。 虽然你应该使用静态方法GetForViewIndependentUse()而不是构造函数来获取实例; 此方法为您提供了一个不依赖于任何特定上下文的ResourceLoader实例,因此您可以从代码中的任何位置检索应用程序中的资源。
答案 1 :(得分:1)
我不知道它是否有帮助,但这是我用来从代码中的ResW加载字符串的类:
using System;
using System.Threading.Tasks;
using Windows.ApplicationModel.Resources;
namespace ProjectName.Services
{
public sealed class ResourceService : ObservableObject
{
private ResourceService() {}
public static Task<ResourceService> CreateServiceAsync ()
{
return Task.FromResult(new ResourceService());
}
public Task<string> GetResourceStringAsync (string stringname)
{
try
{
var resourceloader = ResourceLoader.GetForCurrentView();
return Task.FromResult(resourceloader.GetString(stringname));
}
catch (Exception ex)
{
return null;
}
}
public Task<string> GetResourceStringAsync (string resource, string stringname)
{
try
{
var resourceloader = ResourceLoader.GetForCurrentView(resource);
return Task.FromResult(resourceloader.GetString(stringname));
}
catch (Exception ex)
{
return null;
}
}
}
}
我在OnLaunched事件的App.xaml.cs中初始化它:
this.ResourceService = await ResourceService.CreateServiceAsync()
然后用:
消耗它var stringtoget = await App.ResourceService.GetResourceStringAsync("resourcename", "stringkeyname");