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

10

在Silverlight中,如果一个TextBox设置了AcceptsReturn属性,所有的换行符都是\r,即使Environment.Newline是\r\n。为什么会这样?(WPF的TextBox默认的换行符是\r\n)

2个回答

2

我同意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);
    }
}

1

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

Silverlight可用于Linux和Mac操作系统。这些操作系统(以及大多数其他操作系统)都是基于Unix的,而Unix使用'\r'作为换行符。(据我所知,只有微软使用'\r\n')

在查看框架源代码时,似乎微软开发人员主要使用键入'\r\n'而不是使用Environment.NewLine。


请参阅http://connect.microsoft.com/VisualStudio/feedback/details/419751/silverlight-textboxes-environment-newline。 - Koen
错误。UNIX和MacOS X都使用\n。唯一使用\r的系统是MacOS v.9及以下版本。 - Seva Alekseyev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接