2010-10-20 32 views
13

Mi tienda de aplicaciones de todo el texto localizado en un diccionario recurso de cadena como se sugiere aquí http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspxAñadir retorno de carro al recurso de cadena en 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> 

Mi pregunta es, ¿cómo puedo añadir una nueva línea a un recurso de cadena y tienen se procesa correctamente cuando se usa en un TextBlock.

Hacer esto en línea funciona:

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

Sin embargo, el uso de &#13; en un recurso de cadena no funciona. ¿Cuál es la mejor manera de agregar una nueva línea a un recurso de cadena?

Respuesta

17

ACTUALIZACIÓN: Respuesta actualizada - una mejor opción

El analizador XAML espacios en blanco normalizado de acuerdo a las siguientes reglas.

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

Instruir a su sys:String para conservar espacio en blanco, aplique xml:space="preserved a ella:

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

La opción de cadena localizada funciona, pero la expresión de enlace es un poco fea. –

+0

Sí. Pero eso es lo que le impide: sería bueno si pudiera proporcionar un operador de conversión explícito o implícito en el tipo de Cadena Localizada y hacer que el analizador lo recoja, pero no es así. Puedo mostrar una opción mucho más complicada que involucra una propiedad adjunta, pero no estoy seguro de que sea mejor a largo plazo. –

+0

Se actualizó la respuesta anterior con la opción de propiedad adjunta. –

11

Al introducir un recurso de cadena en la vista de recursos puede agregar CR/LF pulsando Shift + Entrar. Agregará la nueva línea y podrás verla. Recuperar la cadena de recursos y configurarla como texto en el bloque de texto producirá el efecto deseado de reproducir la nueva línea (o múltiples líneas nuevas). En mi caso, quería simular dos párrafos en un solo bloque de texto. No me gustaban los otros enfoques porque requería la traducción a otro idioma para tratar dos cadenas. Quería tratar esto como un único recurso de cadena para que el traductor tuviera el contexto completo de lo que estaban traduciendo.

+0

¡Simple y hermoso! – OneWorld

+0

Esta respuesta debería ser la respuesta aceptada – philologon

+0

Me funcionó. Forma más simple que la respuesta seleccionada. –

0

Por lo tanto, obviamente ha pasado un tiempo, pero para aquellos en mi situación, quizás esto ayude. En mi caso, tuve un archivo de recursos XML autónomo en el que ya estaba utilizando ...

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

... dentro de mi propia clase de ayuda para cargar la cadena de recursos. Así que para mí la solución más sencilla era sólo tiene que insertar una llamada a reemplazar la siguiente manera:

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

Mi ejemplo de mi StringResources.xaml me permite usar el carácter de escape \ n de la siguiente manera ....

<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> 
Cuestiones relacionadas