Why does a Silverlight TextBox use \r for a newlin

2020-03-12 03:09发布

In silverlight, if a TextBox AcceptsReturn, all newlines are \r, even though Environment.Newline is \r\n. Why is this? (WPF has \r\n as newline for textbox)

2条回答
▲ chillily
2楼-- · 2020-03-12 03:57

I think because of compatibility with other operating systems.

Silverlight is available on linux and mac operating systems. Both (and most) of these OS's is unix based and unix uses '\r' for new lines. (as far i know only MS using the '\r\n')

While looking framework source code seems like MS developers mostly used to type '\r\n' instead of using Environment.NewLine.

查看更多
混吃等死
3楼-- · 2020-03-12 04:06

I agree with ertan's answer. I have ran into a scenario in which this is inconveniencing.

We have an application that collects string data from a user through a Silverlight Textbox and stores that data in a SQL Server database, which is a very common. A problem arises when other components of the application use that stored string data expecting line breaks to be represented by "\r\n". One example of such a component is Telerik's reporting solution: See Line break issue in multi line text boxes.

I overcame this problem by using this value converter:

public class LineBreakCorrectionConverter : IValueConverter
{
    private const string CR = "\r";
    private const string CRLF = "\r\n";

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string text = value as string;

        if (text == null)
            return null;

        return text.Replace(CRLF, CR);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string text = value as string;

        if (text == null)
            return null;

        return text.Replace(CR, CRLF);
    }
}
查看更多
登录 后发表回答