如何在Resx文本(WPF .xaml)中使用StringFormat?

时间:2017-03-14 09:11:40

标签: wpf xaml string-formatting resx

我想在Resx文件中使用文本字符串并添加另一个文本。 例如,

 <Label Content="{Resx example}" ContentStringFormat="+++ {0}"

如果我这样使用,则会显示“+++ Example”。 ('示例'在resx文件中。)

但是,如果我尝试使用TextBlock,我就不能使用StringFormat。 例如,

<TextBlock Text="{Resx example, StringFormat="+++ {0}"} ...

我不能那样编码。如何使用Resx编写其他文本? 请帮帮我...... :(

4 个答案:

答案 0 :(得分:1)

我认为在+++之前你只缺少一个{}来使字符串格式有效,

之类的东西
<TextBlock Text="{Binding example,StringFormat={}+++{0}}"/>

答案 1 :(得分:0)

看起来'Infralution本地化wpf dll'不支持此功能。但是,作为一个开源项目,您可以获取其源代码并修改ResxExtension类。您将不得不再添加一个属性(StringFormat)并修改GetValue方法以使用它。或者,如果您不想编辑源代码,您可以创建自己的继承自ResxExtension的标记扩展,添加属性并覆盖GetValue方法。

但是对于简单的情况,当你不需要复杂的格式时,你可以尝试另一种方式。由于TextBlock实际上包含内联元素的集合,您可以尝试以下列方式使用它:

<TextBlock>
    <Run Text="+++" />
    <Run Text="{Resx example, BindingMode=OneWay}" />
</TextBlock>

通过这种方式,您还可以从“+++”

前面的“示例”资源中获取字符串

答案 2 :(得分:0)

由于您尝试本地化您的应用程序,这可能会变得很方便:

我的项目中有一个名为&#39; Strings&#39;适用于所有resx,如Strings.de.resx,Strings.fr.resx等。

然后去添加

xmlns:loc="<yourPathToYourFolderContainigResxFiles>"

然后像这样绑定:

<TextBlock Text="{x:Static loc:Strings.TEST}" />

注意:

  • 要获得Strings.xxx上的intellisens,您需要编译您的resx,以便首先构建。
  • 这将自动选择适合您的主题的CurrentUICulture
  • Access Modifier需要公开!

enter image description here

这是我的MainWindow:

enter image description here

由于这不是Binding,因此您无法使用StringFormat

因此,您需要向ViewModel添加一个属性,该属性保存您的值,或者您需要将完整的字符串放在resx中。

答案 3 :(得分:0)

(我知道最新答案,但对于其他可能在此处检查的人...)

在“代码项目”页面中的“使用RESX文件进行WPF本地化”(https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files)中的说明包含“格式化绑定数据”部分来解决此问题。基本上看看BindingElementName和BindingPath ...

他们给出的例子:

<Resx Key="MyFormatString" BindingElementName="_fileListBox" BindingPath="SelectedItem"/>

<Resx Key="MyMultiFormatString">
    <Resx BindingElementName="_fileListBox" BindingPath="Name"/>
    <Resx BindingElementName="_fileListBox" BindingPath="SelectedItem"/>
</Resx>