Для тех, кто попробовал каждый ответ на этот вопрос и все еще ломает голову, почему ни один из них не работает для вас, вы, возможно, столкнулись с проблемой, с которой я столкнулся.
Мое 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
привязки, и вот так ... все заработало!