В silverlight, если TextBox AcceptsReturn, все строки новой строки \r, хотя Environment.Newline -\r\n. Почему это? (WPF имеет \r\n как новую строку для текстового поля)
Почему Silverlight TextBox использует \r для новой строки вместо Environment.Newline(\ r\n)?
Ответ 1
Я согласен с ответом ertan. Я столкнулся с сценарием, в котором это неудобно.
У нас есть приложение, которое собирает строковые данные от пользователя через текстовое поле Silverlight и сохраняет эти данные в базе данных 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);
}
}
Ответ 2
Я думаю, из-за совместимости с другими операционными системами.
Silverlight доступен в операционных системах Linux и Mac. Оба (и большинство) этих ОС основаны на unix, а unix использует '\ r' для новых строк. (насколько я знаю только MS, используя "\ r\n" )
В то время как внешний вид исходного кода выглядит так, как разработчики MS в основном используют для ввода '\ r\n' вместо использования Environment.NewLine.