为什么Silverlight TextBox使用\ r代替换行而不是Environment.Newline(\ r \ n)?

时间:2010-08-31 15:13:57

标签: c# .net wpf silverlight

在silverlight中,如果TextBox AcceptsReturn,所有换行都是\ r \ n,即使Environment.Newline是\ r \ n。为什么是这样? (WPF将\ r \ n作为文本框的换行符)

2 个答案:

答案 0 :(得分:2)

我同意ertan的回答。我遇到了一个不方便的情况。

我们有一个应用程序通过Silverlight文本框从用户收集字符串数据,并将该数据存储在SQL Server数据库中,这是非常常见的。当应用程序的其他组件使用期望换行符的存储字符串数据由"\r\n"表示时,会出现问题。此类组件的一个示例是Telerik的报告解决方案:请参阅Line break issue in multi line text boxes

我通过使用此值转换器克服了这个问题:

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);
    }
}

答案 1 :(得分:1)

我认为是因为与其他操作系统的兼容性。

Silverlight可在linux和mac操作系统上使用。这些OS的两个(和大多数)都是基于unix的,而unix使用'\ r'来表示新行。 (据我所知只有MS使用'\ r \ n')

虽然看起来框架源代码看起来像MS开发人员主要用来键入'\ r \ n'而不是使用Environment.NewLine。