Para aqueles que tentaram todas as respostas a esta pergunta e ainda estão coçando a cabeça por que nenhum deles funciona para você, você pode ter encontrado uma forma do problema em que encontrei.
Minha TextBlock.Text
propriedade estava dentro de um ToolTipService.ToolTip
elemento e estava vinculada a uma propriedade de um objeto cujos dados estavam sendo extraídos de um procedimento armazenado SQL. Agora, os dados dessa propriedade específica no procedimento armazenado estavam sendo extraídos de uma função SQL.
Como nada funcionou para mim, desisti da minha pesquisa e criei a classe do conversor abaixo:
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();
}
}
Acabei tendo que usar o Enivornment.NewLine
método da resposta do @ dparker . Instruí o conversor a procurar qualquer representação textual possível de uma nova linha e substituí-la porEnvironment.NewLine
.
Isso funcionou!
No entanto, eu ainda estava perplexo com o motivo de nenhum dos outros métodos trabalhar com propriedades de banco de dados.
Deixei um comentário na resposta aceita por @ BobKing :
@BobKing - Isso parece não funcionar no ToolTipService.ToolTip ao vincular a um campo que possui os feeds de linha incorporados a partir de um sproc SQL.
Ele respondeu com:
@CodeMaverick Se você está vinculando ao texto com as novas linhas incorporadas, elas provavelmente devem ter valores reais de 10 caracteres (ou 13) e não os sentinelas XML. Isso é apenas se você desejar escrever novas linhas literais em arquivos XAML.
Uma lâmpada se apagou!
Entrei na minha função SQL, substitui minhas representações textuais de novas linhas por ...
CHAR( 13 ) + CHAR( 10 )
... removeu o conversor da minha TextBlock.Text
ligação e, assim mesmo ... funcionou!