B. *_*non 6 c# resourcedictionary app.xaml winrt-xaml windows-store-apps
我有一些我想从App.xaml中的代码访问的字符串,如:
<Application.Resources>
<ai:TelemetryContext x:Key="ApplicationInsightsBootstrapper" xmlns:ai="using:Microsoft.ApplicationInsights"/>
<ResourceDictionary x:Key="rd">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="GlobalStylesResourceDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
<!-- Application-specific resources. -->
<x:String x:Key="AppName">Platypus</x:String>
<x:String x:Key="BingMapsNamespace">http://schemas.microsoft.com/search/local/ws/rest/v1</x:String>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
我想以编程方式获取这些值,所以我编写了这个实用程序函数:
internal static String GetResourceString(String keyStr)
{
var resldr = new Windows.ApplicationModel.Resources.ResourceLoader();
return resldr.GetString(keyStr);
}
Run Code Online (Sandbox Code Playgroud)
但如果失败," 在Platypus.exe WinRT信息中发生了'System.Exception'类型的第一次机会异常:找不到ResourceMap. "
我以为我在这里找到了问题的解决方案,据说这样做的方式已被弃用,我应该这样做:
internal static String GetResourceString(String keyStr)
{
try
{
//var resldr = new Windows.ApplicationModel.Resources.ResourceLoader();
//return resldr.GetString(keyStr);
var resldr = ResourceLoader.GetForCurrentView();
return resldr.GetString(keyStr);
}
catch (Exception ex)
{
Debug.WriteLine("Something wrong with the keyStr? Exception in GetResourceString(): {0}", ex.Message);
}
return String.Empty;
}
Run Code Online (Sandbox Code Playgroud)
但这也行不通; 我得到了相同的旧"WinRT信息:未找到ResourceMap".也有这个代码.
我通过的arg是有效的:
String bmn = GetResourceString("BingMapsNamespace");
Run Code Online (Sandbox Code Playgroud)
那么什么是有效的?
它可能同样(或更好,实际上,因为它可能会工作),使用App.xaml.cs而不是它的表弟:
public static string BingMapsNamespace { get; set; }
. . .
BingMapsNamespace = "http://schemas.microsoft.com/search/local/ws/rest/v1";
Run Code Online (Sandbox Code Playgroud)
然后从其他地方访问它,如下所示:
String bmn = App.BingMapsNamespace;
Run Code Online (Sandbox Code Playgroud)
后来:是的,它确实有效.我认为对方是正确的,因为它显然适用于某些人.
Pet*_*iho 11
这对我来说很好:
<Application.Resources>
<x:String x:Key="AppName">My App Name</x:String>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
然后在代码中:
string text = (string)App.Current.Resources["AppName"];
Run Code Online (Sandbox Code Playgroud)
我不知道这是否是正确的方法,但这很方便.:)