Non breaking space in XAML vs. code

11,014

Solution 1

Have you tried return value.ToString().Replace(' ', System.Convert.ToChar(160)); ?

Solution 2

In code the syntax for escaping Unicode chars is different than in XAML:

XAML:  
C#:   \x00A0

So this should have worked in code:

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

Solution 3

The reason Char is working and string is not - is that the string is escaped when rendered.

Share:
11,014
Henrik Söderlund
Author by

Henrik Söderlund

Updated on June 03, 2022

Comments

  • Henrik Söderlund
    Henrik Söderlund almost 2 years

    This works fine, and correctly inserts non-breaking spaces into the string:

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

    But what I really need is to replace spaces with non-breaking spaces during data binding. So I wrote a simple value converter that replaces spaces with "&#160;". It does indeed replace spaces with "&#160;" but "&#160;" is displayed literally instead of showing as a non-breaking space. This is my converter:

    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
    }
    

    Does anybody know why it works in XAML, but not in code?

  • Henrik Söderlund
    Henrik Söderlund almost 14 years
    Perfect! Thanks! Do you know why it is necessary to work with char rather than string?
  • Erusso87
    Erusso87 almost 14 years
    It should work with the string override too. Just cast the ToChar() to string afterwards.
  • Tore Aurstad
    Tore Aurstad over 2 years
    Great. I needed this to tweak a <Run> inside a <TextBlock>. Thx.