Pour ceux qui ont essayé toutes les réponses à cette question et se grattent toujours la tête pour savoir pourquoi aucun d'entre eux ne fonctionne pour vous, vous avez peut-être rencontré une forme du problème que j'ai rencontré.
Ma TextBlock.Text
propriété était à l'intérieur d'un ToolTipService.ToolTip
élément et elle était liée à une propriété d'un objet dont les données étaient extraites d'une procédure stockée SQL. À présent, les données de cette propriété particulière dans la procédure stockée étaient extraites d'une fonction SQL.
Comme rien n'avait fonctionné pour moi, j'ai abandonné ma recherche et créé la classe de convertisseur ci-dessous:
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();
}
}
J'ai fini par devoir utiliser la Enivornment.NewLine
méthode de la réponse de @ dparker . J'ai demandé au convertisseur de rechercher toute représentation textuelle possible d'une nouvelle ligne et de la remplacer par Environment.NewLine
.
Ça a marché!
Cependant, j'étais toujours perplexe quant à la raison pour laquelle aucune des autres méthodes ne fonctionnait avec des propriétés de databound.
J'ai laissé un commentaire sur la réponse acceptée de @ BobKing :
@BobKing - Cela ne semble pas fonctionner dans ToolTipService.ToolTip lors de la liaison à un champ dont les sauts de ligne sont intégrés à partir d'un sproc SQL.
Il a répondu par:
@CodeMaverick Si vous liez au texte avec les nouvelles lignes incorporées, elles devraient probablement être de vraies valeurs de 10 caractères (ou 13) et non les sentinelles XML. C'est seulement si vous voulez écrire de nouvelles lignes littérales dans des fichiers XAML.
Une ampoule s'est éteinte!
Je suis entré dans ma fonction SQL, remplacé mes représentations textuelles de sauts de ligne par ...
CHAR( 13 ) + CHAR( 10 )
... retiré le convertisseur de ma TextBlock.Text
reliure, et juste comme ça ... ça a marché!