【问题标题】:How can I programmatically access a resource string from App.xaml?如何以编程方式从 App.xaml 访问资源字符串?
【发布时间】:2014-12-20 21:37:42
【问题描述】:

我想从 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>

我想以编程方式获取这些值,所以我编写了这个实用函数:

internal static String GetResourceString(String keyStr)
{
    var resldr = new Windows.ApplicationModel.Resources.ResourceLoader();
    return resldr.GetString(keyStr);
}

但如果失败,“Platypus.exe WinRT 信息中发生了‘System.Exception’类型的第一次机会异常:未找到 ResourceMap。

我以为我找到了问题here 的解决方案,据说这种方法已被弃用,我应该这样做:

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;
}

但这也行不通;我得到相同的旧“WinRT 信息:未找到 ResourceMap”。也可以使用此代码。

我传递的参数是有效的:

String bmn = GetResourceString("BingMapsNamespace");

那么交易是什么?

更新

使用 App.xaml.cs 而不是它的表亲可能同样好(或者实际上更好,因为它可能会起作用):

public static string BingMapsNamespace { get; set; }
. . .
BingMapsNamespace = "http://schemas.microsoft.com/search/local/ws/rest/v1";

然后像这样从其他地方访问它:

String bmn = App.BingMapsNamespace;

稍后:是的,它确实有效。我将另一个标记为正确,因为它显然适用于某些人。

【问题讨论】:

    标签: c# windows-store-apps winrt-xaml resourcedictionary app.xaml


    【解决方案1】:

    这对我来说很好用:

    <Application.Resources>
        <x:String x:Key="AppName">My App Name</x:String>
    </Application.Resources>
    

    然后在代码中:

    string text = (string)App.Current.Resources["AppName"];
    

    我不知道这是否是正确的方法,但它足够方便。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2010-12-20
      • 1970-01-01
      相关资源
      最近更新 更多