2017-03-14 1 views
1

Je veux utiliser la chaîne de texte dans le fichier Resx et ajouter un autre texte. Par exemple,Comment utiliser StringFormat dans un texte Resx (WPF .xaml)?

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

Si j'utilise comme ça, il afficher "+++ Exemple". ('Example' est dans le fichier resx.)

Mais, si j'essaie d'utiliser TextBlock, je ne peux pas utiliser StringFormat. Par exemple,

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

Je ne peux pas coder comme ça. Comment puis-je écrire du texte supplémentaire avec Resx? S'il vous plaît aidez-moi ... :(

+0

Qu'est-ce que Resx dans votre exemple? Est-ce une extension de balisage personnalisée? – Pavel

+0

Je référence 'Infralution localisation wpf dll', et je crée un fichier de ressources (StringResource.resx) pour changer de langue. @Pavel – parfum

Répondre

0

Il ressemble à la « localisation Infralution WPF dll 'ne supporte pas cette fonctionnalité, mais comme un projet open source, vous pouvez récupérer son code source et modifier la classe ResxExtension.Vous devrez ajouter une propriété (StringFormat) et modifier la méthode GetValue pour l'utiliser. vous ne voulez pas modifier le code source, vous pouvez simplement créer votre propre extension de balisage héritée de ResxExtension, ajouter la propriété et remplacer la méthode GetValue. Mais pour les cas simples, lorsque vous n'avez pas besoin d'une mise en forme complexe, vous pouvez essayer d'aller dans une autre direction. Comme le TextBlock contient en fait une collection d'éléments en ligne, vous pouvez essayer de l'utiliser de la manière suivante:

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

De cette façon, vous obtiendrez également la chaîne de la ressource « exemple » préfixé avec « +++ »

+0

wow c'est vraiment simple! Merci! – parfum

1

Je pense que vous manquez un seul {} avant +++ pour faire ce travail de format de chaîne, quelque chose comme

<TextBlock Text="{Binding example,StringFormat={}+++{0}}"/> 
+0

Non contraignant, j'utilise Resx ... – parfum

0

Puisque vous essayez de localiser l'application ur cela peut devenir pratique:

Je mon projet, je suis un dossier appelé « Strings » pour tous resx comme Strings.de.resx, Strings.fr.resx, etc.

puis ajouter

xmlns:loc="<yourPathToYourFolderContainigResxFiles>" 

Rabattre comme ceci:

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

Note:

  • Pour obtenir intellisens sur Strings.xxx vous devez avoir votre resx compilé afin de construire la première.
  • Cela va automatiquement choisir de CurrentUICulture de votre discussion.
  • Access Modifier doit être public!

enter image description here

Ceci est mon MainWindow:

enter image description here

Puisque ce n'est pas un Binding vous ne pouvez pas utiliser StringFormat ici.

Vous devez donc ajouter une propriété à votre ViewModel qui contient vos valeurs ou vous devez placer la chaîne complète dans votre resx.

+0

Merci pour votre aimable réponse. :) – parfum

+0

@parfum vous êtes les bienvenus espérons qu'il aide –