我想在Resx文件中使用文本字符串并添加另一个文本。 例如,
<Label Content="{Resx example}" ContentStringFormat="+++ {0}"
如果我这样使用,则会显示“+++ Example”。 ('示例'在resx文件中。)
但是,如果我尝试使用TextBlock,我就不能使用StringFormat。 例如,
<TextBlock Text="{Resx example, StringFormat="+++ {0}"} ...
我不能那样编码。如何使用Resx编写其他文本? 请帮帮我...... :(
答案 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}" />
注意:
CurrentUICulture
。Access Modifier
需要公开!这是我的MainWindow:
由于这不是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>