【发布时间】:2010-08-31 15:13:56
【问题描述】:
在silverlight 中,如果TextBox AcceptsReturn,所有换行符都是\r,即使Environment.Newline 是\r\n。为什么是这样? (WPF 有 \r\n 作为文本框的换行符)
【问题讨论】:
标签: c# .net wpf silverlight
在silverlight 中,如果TextBox AcceptsReturn,所有换行符都是\r,即使Environment.Newline 是\r\n。为什么是这样? (WPF 有 \r\n 作为文本框的换行符)
【问题讨论】:
标签: c# .net wpf silverlight
我同意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);
}
}
【讨论】:
我认为是因为与其他操作系统的兼容性。
Silverlight 在 linux 和 mac 操作系统上可用。这些操作系统(和大多数)都是基于 unix 的,unix 使用 '\r' 作为新行。 (据我所知,只有 MS 使用 '\r\n')
虽然看起来框架源代码似乎 MS 开发人员大多习惯于键入 '\r\n' 而不是使用 Environment.NewLine。
【讨论】: