[英]How can I use StringFormat in Resx text (WPF .xaml)?
我想在 Resx 文件中使用文本字符串並添加另一個文本。 例如,
<Label Content="{Resx example}" ContentStringFormat="+++ {0}"
如果我這樣使用,它會顯示 "+++ Example" 。 (“示例”在 resx 文件中。)
但是,如果我嘗試使用 TextBlock,則無法使用 StringFormat。 例如,
<TextBlock Text="{Resx example, StringFormat="+++ {0}"} ...
我不能那樣編碼。 如何使用 Resx 編寫其他文本? 請幫我 ... :(
我認為您在 +++ 之前只缺少一個{}
以使該字符串格式工作,例如
<TextBlock Text="{Binding example,StringFormat={}+++{0}}"/>
看起來“Infralution localization wpf dll”不支持此功能。 但由於它是一個開源項目,您可以獲取其源代碼並修改 ResxExtension 類。 您將不得不再添加一個屬性 (StringFormat) 並修改 GetValue 方法以使用它。 或者,如果您不想編輯源代碼,您可以創建自己的從 ResxExtension 繼承的標記擴展,添加屬性並覆蓋 GetValue 方法。
但是對於簡單的情況,當你不需要復雜的格式時,你可以嘗試換一種方式。 由於 TextBlock 實際上包含一組內聯元素,您可以嘗試通過以下方式使用它:
<TextBlock>
<Run Text="+++" />
<Run Text="{Resx example, BindingMode=OneWay}" />
</TextBlock>
通過這種方式,您還可以從前綴為“+++”的“示例”資源中獲取字符串
由於您正在嘗試本地化您的應用程序,這可能會變得方便:
我的項目我有一個名為“Strings”的文件夾,用於所有resx
如 Strings.de.resx、Strings.fr.resx 等。
然后去添加
xmlns:loc="<yourPathToYourFolderContainigResxFiles>"
然后像這樣綁定:
<TextBlock Text="{x:Static loc:Strings.TEST}" />
筆記:
CurrentUICulture
自動選擇。Access Modifier
需要公開!這是我的主窗口:
由於這不是Binding
您不能在此處使用StringFormat
。
因此,您要么需要向包含您的值的 ViewModel 添加一個屬性,要么您需要將完整的字符串放在 resx.xml 中。
(遲到的答案,我知道,但對於可能在這里檢查的其他人......)
“使用 RESX 文件的 WPF 本地化”( https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files ) CodeProject 頁面中的說明有一節“格式化綁定數據”解決了這個問題. 基本上看看 BindingElementName 和 BindingPath ...
他們舉的例子:
<Resx Key="MyFormatString" BindingElementName="_fileListBox" BindingPath="SelectedItem"/>
和
<Resx Key="MyMultiFormatString">
<Resx BindingElementName="_fileListBox" BindingPath="Name"/>
<Resx BindingElementName="_fileListBox" BindingPath="SelectedItem"/>
</Resx>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.