对于那些已经尝试了这个问题的所有答案并且仍然为为什么它们都不适合你而摸不着头脑的人,你可能遇到了我遇到的问题的一种形式。
我的TextBlock.Text 属性位于ToolTipService.ToolTip 元素内,它被数据绑定到从SQL 存储过程中提取数据的对象的属性。现在,存储过程中这个特定属性的数据正在从 SQL 函数中提取。
由于没有什么对我有用,我放弃了搜索并在下面创建了转换器类:
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();
}
}
我最终不得不使用来自@dparker's answer 的Enivornment.NewLine 方法。我指示转换器查找任何可能的换行符文本表示并将其替换为Environment.NewLine。
成功了!
但是,我仍然对为什么没有其他方法适用于数据绑定属性感到困惑。
我在@BobKing's accepted answer留言:
@BobKing - 当绑定到从 SQL 存储过程中嵌入换行符的字段时,这似乎在 ToolTipService.ToolTip 中不起作用。
他回答说:
@CodeMaverick 如果您要绑定到嵌入了新行的文本,它们可能应该是真正的 char 10 值(或 13's),而不是 XML 标记。这仅适用于您想在 XAML 文件中编写文字换行符。
一个灯泡熄灭了!
我进入了我的 SQL 函数,用...替换了我的换行符文本表示
CHAR( 13 ) + CHAR( 10 )
...从我的TextBlock.Text 绑定中删除了转换器,就像那样...它起作用了!