Para aquellos que han intentado todas las respuestas a esta pregunta y todavía se están rascando la cabeza de por qué ninguno de ellos funciona para usted, es posible que haya encontrado una forma del problema con el que me encontré.
Mi TextBlock.Text
propiedad estaba dentro de un ToolTipService.ToolTip
elemento y estaba enlazada a una propiedad de un objeto cuyos datos se extraían de un procedimiento almacenado de SQL. Ahora los datos de esta propiedad en particular dentro del procedimiento almacenado se extraían de una función SQL.
Como nada me había funcionado, dejé mi búsqueda y creé la siguiente clase de convertidor:
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();
}
}
Terminé teniendo que usar el Enivornment.NewLine
método de la respuesta de @ dparker . Le indiqué al convertidor que buscara cualquier representación textual posible de una nueva línea y la reemplazara por Environment.NewLine
.
Esto funcionó!
Sin embargo, todavía estaba perplejo sobre por qué ninguno de los otros métodos funcionaba con propiedades enlazadas a datos.
Dejé un comentario sobre la respuesta aceptada de @ BobKing :
@BobKing: parece que esto no funciona en ToolTipService.ToolTip cuando se vincula a un campo que tiene los avances de línea incrustados desde un sproc SQL.
Él respondió con:
@CodeMaverick Si está vinculando al texto con las nuevas líneas incrustadas, probablemente deberían ser valores reales de 10 caracteres (o 13) y no los centinelas XML. Esto es solo si desea escribir nuevas líneas literales en archivos XAML.
¡Se encendió una bombilla!
Ingresé a mi función SQL, reemplacé mis representaciones textuales de nuevas líneas con ...
CHAR( 13 ) + CHAR( 10 )
... eliminé el convertidor de mi TextBlock.Text
enlace, y así como así ... ¡funcionó!