2010-05-31 23 views
14

Esto funciona bien y correctamente inserta espacios de no separación en la cadena:espacio duro en XAML vs. código

<TextBlock Text="Non&#160;Breaking&#160;Text&#160;Here"></TextBlock> 

Pero lo que realmente necesita es reemplazar los espacios con espacios de no separación durante el enlace de datos . Así que escribí un convertidor de valor simple que reemplaza espacios con "&#160;". De hecho, reemplaza espacios con "&#160;", pero "&#160;" se muestra literalmente en lugar de mostrarse como un espacio sin interrupciones. Este es mi convertidor:

public class SpaceToNbspConverter : IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value.ToString().Replace(" ", "&#160;"); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

¿Alguien sabe por qué funciona en XAML, pero no en el código?

+0

Esto es muy bueno, yo no sabía cómo hacer espacio sin interrupción antes. Gracias por la pregunta! ¡Respondió a mi propia pregunta! – cplotts

Respuesta

13

¿Has probado return value.ToString().Replace(' ', System.Convert.ToChar(160));?

+0

¡Perfecto! ¡Gracias! ¿Sabes por qué es necesario trabajar con char en lugar de string? –

+0

Debería funcionar con la anulación de cadena también. Simplemente lanza el ToChar() a la cadena después. – bitbonk

3

La razón por la que Char está trabajando y la cadena no es - es que la cadena se escapó cuando se procesó.

5

En la sintaxis de código para escapar caracteres Unicode es diferente que en XAML:

XAML: &#160; 
C#: \x00A0 

Así que esto debería haber trabajado en código:

return value.ToString().Replace(" ", "\xA0"); 
Cuestiones relacionadas