Для тех, кто попробовал каждый ответ на этот вопрос и до сих пор ломает голову над тем, почему ни один из них не работает для вас, вы могли столкнуться с проблемой, с которой я столкнулся.
Мое TextBlock.Text
свойство находилось внутри ToolTipService.ToolTip
элемента, и оно было связано со свойством объекта, данные которого извлекались из хранимой процедуры SQL. Теперь данные из этого конкретного свойства в хранимой процедуре извлекались из функции SQL.
Поскольку у меня ничего не получалось, я прекратил поиск и создал класс конвертера ниже:
public class NewLineConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = string.Empty;
if (value.IsNotNull())
{
s = value.ToString();
if (s.Contains("\\r\\n"))
s = s.Replace("\\r\\n", Environment.NewLine);
if (s.Contains("\\n"))
s = s.Replace("\\n", Environment.NewLine);
if (s.Contains("

"))
s = s.Replace("

", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains("<br />"))
s = s.Replace("<br />", Environment.NewLine);
if (s.Contains("<LineBreak />"))
s = s.Replace("<LineBreak />", Environment.NewLine);
}
return s;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
В итоге мне пришлось использовать Enivornment.NewLine
метод из ответа @ dparker . Я дал указание конвертеру найти любое возможное текстовое представление новой строки и заменить его на Environment.NewLine
.
Это сработало!
Однако я все еще был озадачен тем, почему ни один из других методов не работал со свойствами привязки к базе данных.
Я оставил комментарий на принятый ответ @ BobKing :
@BobKing - похоже, это не работает в ToolTipService.ToolTip при связывании с полем, в котором переводы строк встроены из SQL-кода.
Он ответил:
@CodeMaverick Если вы привязываетесь к тексту со встроенными новыми строками, они, вероятно, должны быть реальными значениями char 10 (или 13), а не сторожами XML. Это только если вы хотите писать буквально новые строки в файлах XAML.
Лампа погасла!
Я вошел в мою функцию SQL, заменил мои текстовые представления новых строк на ...
CHAR( 13 ) + CHAR( 10 )
... убрал конвертер из моей TextBlock.Text
привязки, и просто так ... он работал!