簡體   English   中英

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

[英]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}" />

筆記:

  • 要在 Strings.xxx 上獲得智能感知,你需要編譯你的 resx,所以首先構建。
  • 這將根據您的線程的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM