2010-10-20 17 views
13

stocker tout le texte localisé dans un dictionnaire de ressources de chaîne Mes applications comme le suggère ici http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspxAjouter retour chariot à la ressource de chaîne dans WPF

 <ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <!-- String resource that can be localized --> 
    <system:String x:Key="localizedMessage">en-US Message</system:String> 

</ResourceDictionary> 

Ma question est, comment puis-je ajouter une nouvelle ligne à une ressource de chaîne et ont il s'affiche correctement lorsqu'il est utilisé dans un TextBlock.

Faire cela fonctionne en ligne:

<TextBlock Name="test" Text="Line 1&#13;Line 2"> </TextBlock> 

Cependant, l'utilisation &#13; dans une ressource de chaîne ne fonctionne pas. Quelle est la meilleure façon d'ajouter une nouvelle ligne à une ressource de chaîne?

Répondre

17

MISE À JOUR: réponse mise à jour - meilleure option

L'analyseur XAML normalisé selon les espaces les règles suivantes.

http://msdn.microsoft.com/en-us/library/cc189036(VS.95).aspx#whitespace

Pour charger votre sys:String pour préserver les espaces, appliquer xml:space="preserved lui:

<sys:String x:Key="MyLocalizedString" xml:space="preserve">this&#13;&#10;is&#13;&#10;my&#13;&#10;resource</sys:String> 
+0

L'option de chaîne localisée fonctionne, mais l'expression de liaison est un peu moche. –

+0

Oui. Mais c'est ce à quoi vous êtes confronté - il serait bien que vous puissiez fournir un opérateur de conversion explicite ou implicite sur le type LocalizedString et que l'analyseur le récupère, mais ce n'est pas le cas. Je peux montrer une option beaucoup plus compliquée impliquant une propriété attachée, mais je ne suis pas sûr que ce soit mieux à long terme. –

+0

Mise à jour de la réponse ci-dessus avec l'option de propriété jointe. –

11

Lorsque vous entrez dans une ressource de chaîne dans la vue ressource que vous pouvez ajouter CR/LF en appuyant sur Maj + Entrer. Il va ajouter la nouvelle ligne et vous serez en mesure de le voir. Récupérer la chaîne de ressources et la définir comme texte sur le bloc de texte donnera alors l'effet désiré de reproduire le retour à la ligne (ou plusieurs retours à la ligne). Dans mon cas, je voulais simuler deux paragraphes dans un seul bloc de texte. Je n'aimais pas les autres approches car cela nécessitait la traduction dans une autre langue pour traiter deux chaînes. Je voulais traiter cela comme une ressource de chaîne unique afin que le traducteur ait le contexte complet de ce qu'il traduisait.

+0

Simple et belle! – OneWorld

+0

Cette réponse devrait être la réponse acceptée – philologon

+0

Cela a fonctionné pour moi. Way plus simple que la réponse sélectionnée. –

0

Donc, il a évidemment été un moment, mais pour ceux dans ma situation peut-être cela aidera. Dans mon cas, j'avais un fichier de ressources XML autonome où j'utilisais déjà ...

var strVal = (string)Application.Current.FindResource(key); 
return strVal; 

... dans mon propre classe d'aide pour charger la chaîne de ressource. Donc, pour moi, la solution la plus simple est d'insérer simplement un appel à remplacer comme suit:

var strVal = (string)Application.Current.FindResource(key); 
strVal = strVal.Replace(@"\n", Environment.NewLine); 
return strVal; 

Mon exemple de mon StringResources.xaml me permet d'utiliser le caractère d'échappement \ n comme suit ....

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <system:String x:Key="resKeyValue1">The source field "{0}" is already mapped to the destination field "{1}".\n\n 
    Do you want to additionally map the source field "{0}" to the destination field "{2}"?</system:String> 

    ... 
</ResourceDictionary> 
Questions connexes