在silverlight中,如果TextBox AcceptsReturn,所有换行都是\ r \ n,即使Environment.Newline是\ r \ n。为什么是这样? (WPF将\ r \ n作为文本框的换行符)
答案 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。