Für diejenigen, die jede Antwort auf diese Frage ausprobiert haben und sich immer noch am Kopf kratzen, warum keiner von ihnen für Sie arbeitet, sind Sie möglicherweise auf eine Form des Problems gestoßen, auf das ich gestoßen bin.
Meine TextBlock.Text
Eigenschaft befand sich innerhalb eines ToolTipService.ToolTip
Elements und war an eine Eigenschaft eines Objekts gebunden, dessen Daten aus einer gespeicherten SQL-Prozedur abgerufen wurden. Jetzt wurden die Daten von dieser bestimmten Eigenschaft innerhalb der gespeicherten Prozedur aus einer SQL-Funktion abgerufen.
Da für mich nichts funktioniert hatte, gab ich meine Suche auf und erstellte die folgende Konverterklasse:
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();
}
}
Am Ende musste ich die Enivornment.NewLine
Methode aus der Antwort von @ dparker verwenden . Ich habe den Konverter angewiesen, nach einer möglichen Textdarstellung einer Newline zu suchen und diese durch zu ersetzen Environment.NewLine
.
Das hat funktioniert!
Ich war jedoch immer noch ratlos darüber, warum keine der anderen Methoden mit datengebundenen Eigenschaften arbeitete.
Ich habe einen Kommentar zu @ BobKings akzeptierter Antwort hinterlassen :
@BobKing - Dies scheint im ToolTipService.ToolTip nicht zu funktionieren, wenn eine Bindung an ein Feld erfolgt, in das die Zeilenvorschübe aus einem SQL-Sproc eingebettet sind.
Er antwortete mit:
@CodeMaverick Wenn Sie mit eingebetteten neuen Zeilen an Text binden, sollten diese wahrscheinlich echte Zeichen-10-Werte (oder 13-Werte) und nicht die XML-Sentinels sein. Dies ist nur möglich, wenn Sie neue Zeilen in XAML-Dateien schreiben möchten.
Eine Glühbirne ging aus!
Ich ging in meine SQL-Funktion, ersetzte meine Textdarstellungen von Zeilenumbrüchen durch ...
CHAR( 13 ) + CHAR( 10 )
... den Konverter von meiner TextBlock.Text
Bindung entfernt und einfach so ... es hat funktioniert!