Pour ceux qui ont essayé toutes les réponses à cette question et qui sont toujours qui se demandent pourquoi aucune d'entre elles ne fonctionne pour vous, il se peut que vous ayez rencontré une forme du problème que j'ai rencontré.
Mon TextBlock.Text
était à l'intérieur d'un ToolTipService.ToolTip
et il était lié aux données d'une propriété d'un objet dont les données étaient extraites d'une procédure stockée SQL. 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é mes recherches et j'ai 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 le Enivornment.NewLine
méthode de 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, je restais perplexe quant à la raison pour laquelle aucune des autres méthodes ne fonctionnait avec les propriétés liées aux données.
J'ai laissé un commentaire sur La réponse acceptée de @BobKing :
@BobKing - Cela ne semble pas fonctionner dans le ToolTipService.ToolTip lorsqu'il est lié à un champ dans lequel les retours à la ligne sont intégrés à partir d'un sproc SQL.
Il a répondu par :
@CodeMaverick Si vous liez du texte avec les nouvelles lignes incorporées, elles devraient probablement être des valeurs réelles de char 10 (ou 13) et non des sentinelles XML. C'est seulement si vous voulez écrire de nouvelles lignes littérales dans les fichiers XAML.
Une ampoule s'est allumée !
Je suis allé dans ma fonction SQL, j'ai remplacé mes représentations textuelles des nouvelles lignes par ...
CHAR( 13 ) + CHAR( 10 )
... j'ai retiré le convertisseur de mon TextBlock.Text
la liaison, et juste comme ça ... ça a marché !