从XAML中的*.resx文件中获取值

0x4*_*9D1 66 c# xaml localization resx

是否可以将资源文件中的某些值添加到XAML标记中?或者对于本地化,我们总是要在*.cs文件中制作这样的东西:

txtMessage.Text = Messages.WarningUserMessage;
Run Code Online (Sandbox Code Playgroud)

Messages资源在哪里,txtMessage是TextBlock.

Jul*_*ain 77

确保在resx编辑器中将Code Generation设置为Public,然后您可以简单地使用:

<TextBlock Text="{x:Static Messages.WarningUserMessage}" />
Run Code Online (Sandbox Code Playgroud)

  • ...如果`Messages`不在另一个程序集中,因为构造函数是作为内部生成的. (4认同)
  • 请注意,仅当Messages与屏幕位于相同的名称空间中时,它才有效。 (2认同)
  • 您仍然需要像@Yogs 回答 xmlns:resource="clr-namespace:YourProject.Properties" 一样在设计器中添加命名空间,并像 {x:Static resource:Resources.ResourceName} 一样使用它 (2认同)

小智 62

这样做要容易得多.在XAML文件中添加xmlns并直接使用资源.

xmlns:resx="clr-namespace:wpfapplicationname.Properties"
Title="{x:Static resx:Resources.name}"
Run Code Online (Sandbox Code Playgroud)

  • 这是:http://www.grumpydev.com/2009/09/08/localising-wpf-applications-using-resx-files-and-standard-data-binding-without-a-markupextension/ (5认同)
  • 这种方法的唯一缺点当然是你不能动态地改变文化.有一篇很棒的文章介绍了如何通过在某处使用标记扩展和本地化管理器来实现这种行为. (3认同)

小智 11

我知道我的回复有点迟了,但我认为值得分享:

要使用存储在*.resx文件中的字符串而不使用Static关键字:

  1. 在App.Xaml文件中为Properties添加命名空间 xmlns:resource="clr-namespace:YourProject.Properties"
  2. 在ApplicationResources(app.xaml文件)中为您的*.resx文件添加资源

    <Application.Resources> <resource:ResourceFileName x:Key="ApplicationStringResources" /> </Application.Resources>

  3. 在您的XAML文件中使用以下Binding,让我们以Window Title为例

    Title="{Binding TitleString, Source={StaticResource ResourceKey=ApplicationStringResources}}"

    TitleString是*.resx文件中StringProperty的名称

  4. 最后但并非最不重要的是,不要忘记将资源文件访问修饰符更改为Public.


Ste*_*ins 5

最简单的方法可能是直接引用项目(它们是静态属性,默认为内部):

<TextBlock x:Name="txtMessage" Text="{x:Static MyApp.Properties.Resource.TextString}"/>
Run Code Online (Sandbox Code Playgroud)

如果您正在使用本地化的WPF应用程序,那么我建议您在http://wpflocalization.codeplex.com/上查看有关CodePlex的指南,如果您正在构建复合应用程序(使用PRISM或MEF)然后我有一篇关于使用标准绑定完成WPF本地化的好方法博客文章.