如何从资源中获取字符串以在xaml中的WPF资源部分中进行分配

我有一个带有以下用户控件的XBAP应用程序:

         ... 

现在我想从一个resx文件中获取字符串“xxUser”,该文件作为资源嵌入到应用程序中我该如何实现?

这些答案都不是你想要的。 我首先阅读WPF中的本地化。 您会发现,如果您使用WPF进行本地化,则需要在应用程序的每个节点上定义x:Uid。

http://msdn.microsoft.com/en-us/library/ms788718.aspx

我能够在以下程序中完成:

  

我还必须在我的xaml中包含.Properties命名空间,如下所示:

 xmlns:prop="clr-namespace:MyProjectNamespace.Properties" 

这使我不仅可以使用我为我的项目为全球化定义的字符串资源,而且还能够(双向)绑定到我的应用程序的设置。 这让我很容易记住窗口的位置,大小等。如您所见,使用“设置”。 用于设置和资源。 对于资源。

正如史蒂文所提到的,我认为“官方”方式或“最佳”方式是将x:Uid粘贴在你想要全球化的所有东西上,但我没有,它没有任何问题。 我认为如果您使用自动化工具或像在大型项目中那样打破翻译任务,则大多数情况下都需要x:Uid。 我只是在VS中手动完成了所有我自己的东西,所以也许没关系。

我在上面忘记提到的另外两点“我能够做到……”:

  1. 您不必将Properties.Resources对象包装在自己的对象中。 您可以直接访问它,就像我在上面的示例中所做的那样。 我认为包装对象是一种获得与我在第二点讨论的结果相同的方法。
  2. 默认情况下,资源文件使用“ResXFileCodeGenerator”构建。 这使它们在生成代码文件时是内部的,因此xaml无法访问它。 您必须将其更改为“ PublicResXFileCodeGenerator ”,它将生成公共类。 您可以通过单击解决方案资源管理器中的资源文件并编辑“自定义工具”属性来更改此设置。

(对不起,我无法编辑上面的post,因为我当时是临时会员。)

创建一个静态类,使资源可用作属性:

 public static class Resources { public string Resource { return Properties.Resources.ResourceManager.GetString("Resource"); } } 

然后你可以将TextBox绑定到:

  

正如Ben所说,我找到了另一个教程 。 Resources.resxaccess modifier应该从Internal更改为Public 。 我多次失败,在将access modifier更改为Public ,它确实有效。

我不知道这是否可以直接在XAML中完成,但如果您在ResourceManager周围编写自己的包装类并使用它。 请注意,该类inheritance自TextBlock:

 public class ResourceContentTextBlock : TextBlock { public string ResourceName { set { this.Text = Properties.Resources.ResourceManager.GetString(value); } } } 

然后,您可以在XAML中的任何位置使用ResourceContentTextBlock,否则您将使用TextBlock: