在Silverlight中,如果一个TextBox设置了AcceptsReturn属性,所有的换行符都是\r,即使Environment.Newline是\r\n。为什么会这样?(WPF的TextBox默认的换行符是\r\n)
在Silverlight中,如果一个TextBox设置了AcceptsReturn属性,所有的换行符都是\r,即使Environment.Newline是\r\n。为什么会这样?(WPF的TextBox默认的换行符是\r\n)
我同意ertan的答案。我曾经遇到过这种情况,它会带来不便。
我们有一个应用程序通过Silverlight Textbox收集字符串数据,并将该数据存储在SQL Server数据库中,这是非常常见的。当应用程序的其他组件使用存储的字符串数据时,期望换行符由"\r\n"
表示时,就会出现问题。其中一个例子是Telerik的报告解决方案:请参见多行文本框中的换行符问题。
我通过使用这个值转换器克服了这个问题:
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);
}
}
我认为这是因为与其他操作系统的兼容性有关。
Silverlight可用于Linux和Mac操作系统。这些操作系统(以及大多数其他操作系统)都是基于Unix的,而Unix使用'\r'作为换行符。(据我所知,只有微软使用'\r\n')
在查看框架源代码时,似乎微软开发人员主要使用键入'\r\n'而不是使用Environment.NewLine。