【问题标题】:How to get a string resource in C# (WPF)?如何在 C# (WPF) 中获取字符串资源?
【发布时间】:2012-12-15 14:10:33
【问题描述】:

我知道如何从 XAML 中的字符串资源中获取资源:

{Binding OK, Source={StaticResource LocStrings}}

但是,我想直接在 C# 中使用本地化字符串,例如像

someString = Resources["LocStrings"]["StringId"];

但这不会编译。

【问题讨论】:

  • (抱歉我已经知道答案了……我刚看到后面的资源代码):
  • 顺便说一句,答案很简单:使用 .Resources; someString = Strings.StringId;

标签: c# wpf localization localizable.strings


【解决方案1】:

你需要这样的东西:

var myText = this.FindResource("LocStrings") as string;

我猜,您可以将 this 更改为您的资源所在的任何位置。

更新:

通常,这是我用于全局资源的:

var myText = Application.Current.FindResource("resourceName") as string;

【讨论】:

  • 没有更好的(类型安全)方式吗?使用 WinForms 应用程序获取字符串资源要好得多:Properties.Resources.ResourceName;
  • 我不知道。但您可以随时自行检查类型。
  • 也可以在 WPF 应用程序中使用 .resx 文件来获得这些好处,但我想知道 XAML 没有提供这些好处......
  • AppNamespace.Properties.Resources.。一个基本的 WPF 东西!
  • @RobinDavies 我不使用带有 WPF 的 RESX 文件,只使用资源字典。现在我不确定你的建议是否有效(自从我上次检查这类事情以来已经有好几年了),但是问题的形成方式,我的印象是作者想要根据一个键获得翻译类型为string
【解决方案2】:

资源字符串可作为自动生成的Resources 类中的静态成员访问,该类位于<Default.app.namespace>.Properties.Resources 中。 PropertiesResources 都是不幸的命名空间名称,它们与您在编写 WPF 代码时可能已经在范围内的属性或命名空间发生冲突。因此,您可能必须使用完全限定名称。例如

MyProject.Properties.Resources.AppName

对于在Resources.resx 中定义的名为“AppName”的字符串。

与调用 FindResource 相比,您应该更喜欢这种获取字符串资源的方法,因为它提供了资源字符串名称的编译时检查。

FFS。人,这怎么可能没有作为答案呢?

【讨论】:

    【解决方案3】:

    这不是一个完整的答案,但可能对您的国际化应用程序有所帮​​助,请参阅此codeplex article 可能对您有用。

    【讨论】:

      猜你喜欢
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多