2010-05-31 12 views
14

Questo funziona bene, e correttamente inserisce spazi unificatori nella stringa:spazio unificatore in XAML vs. codice

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

Ma quello che ho veramente bisogno è quello di sostituire gli spazi con gli spazi non-breaking durante il data binding . Così ho scritto un semplice convertitore di valori che sostituisce gli spazi con "&#160;". Sostituisce infatti gli spazi con "&#160;" ma "&#160;" viene visualizzato letteralmente anziché essere visualizzato come spazio non interrotto. Questo è il mio convertitore:

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 
} 

Qualcuno sa perché funziona in XAML, ma non nel codice?

+0

Questo è grande, io non sapevo come fare spazio non rottura prima. Grazie per la domanda! Ha risposto alla mia stessa domanda! – cplotts

risposta

13

Hai provato return value.ToString().Replace(' ', System.Convert.ToChar(160));?

+0

Perfetto! Grazie! Sai perché è necessario lavorare con char piuttosto che string? –

+0

Dovrebbe funzionare anche con l'override della stringa. In seguito, lancia il ToChar() alla stringa. – bitbonk

3

Il motivo per cui Char sta lavorando e la stringa non lo è - è che la stringa viene sfuggita durante il rendering.

5

Nel codice la sintassi per sfuggire caratteri Unicode è diverso da quello in XAML:

XAML: &#160; 
C#: \x00A0 

Quindi questo dovrebbe avere lavorato in codice:

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