【问题标题】:Access .resx string resource within xaml layout in uwp在 uwp 的 xaml 布局中访问 .resx 字符串资源
【发布时间】:2016-03-21 12:19:36
【问题描述】:

我想直接在我的 xaml 布局中访问资源,官方doc 给了我们一些糟糕的例子,所以我无法让它工作。假设关注Resources.resw

我可以像这样从 C# 类访问我的字符串资源:

 var loader = new ResourceLoader();
 var resourceString = loader.GetString("txt_ok");

例如,我如何在 xaml 中访问此资源以获取 TextBlock 文本?

<TextBlock
  x:Name="MyTextBox"
  Text="I want to get string resource here"/> 

我尝试了来自herehere 的一些示例,但没有成功

【问题讨论】:

  • 当您按照链接解决方案中的说明使用 x:Static 时,是否会出现编译错误?如果是这样,也许您需要公开您的 resx(打开属性并设置自定义工具 = PublicResXFileCodeGenerator)。
  • 我收到错误Static is not supported in a Windows Universal project. 尝试如下:Text="{x:Static MyAppName.Properties.Resource.txt_ok}"
  • 如果您(或其他读者)仍在寻找可在其他 (asp.net/xamarin/wpf) 项目中重复使用的解决方案和/或只想使用 Text属性绑定到资源,看看这个:stackoverflow.com/a/35813707/2901207

标签: c# xaml win-universal-app


【解决方案1】:

在 UWP 应用中,当你在资源文件中定义字符串资源时,该字符串的Name 属性可以是“Name”或“Name.Property”。

在xaml代码中,我们使用Uid属性将控件关联到资源,但是当我们在xaml代码中使用资源时,我们必须在资源名称中添加指定的属性,以防控件不知道应该使用什么属性应用于字符串资源。

后面的代码也是这样,获取资源使用

 var loader = new ResourceLoader();
 var resourceString = loader.GetString("txt_ok"); 

但您仍需要将此resourceString 设置为TextBlockText 属性,例如:

txt.Text = resourceString;

所以如果你想直接在 xaml 代码中使用字符串资源,你需要像这样编辑你的资源文件:

您现在可以将您的 TextBlock 与您的资源相关联,如下所示:

<TextBlock x:Uid="txt_cancel" />

或者像这样(不是 100% 正确,这取决于你的资源文件的位置):

<TextBlock x:Uid="/Resources/txt_settings" />

补充: 您还可以在资源文件中定义其他属性,例如:

当您将此资源应用于TextBlock

<TextBlock x:Uid="MyApp" />

你会看到:

【讨论】:

    【解决方案2】:

    在c#代码中访问字符串资源属性

    var res = ResourceLoader.GetForCurrentView();
    var deleteText = res.GetString("DeleteBlock/Text");
    var confirmYes = res.GetString("ConfirmYes");
    

    https://liftcodeplay.com/2015/11/08/accessing-resource-strings-via-code-in-uwp/

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多