この質問に対するすべての回答を試しても、なぜどれもうまくいかないのか頭を悩ませている人は、私が遭遇した問題の形に遭遇した可能性があります.
私の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 answerEnivornment.NewLineの方法を使用する必要がありました。改行の可能なテキスト表現を探して、それを に置き換えるようにコンバーターに指示しました。Environment.NewLine
これはうまくいきました!
しかし、なぜ他の方法ではデータバインドされたプロパティを処理できないのか、私は依然として困惑していました。
@BobKingの受け入れられた回答にコメントを残しました:
@BobKing - SQL sproc から改行が埋め込まれたフィールドにバインドする場合、これは ToolTipService.ToolTip で機能しないようです。
彼は次のように答えました。
@CodeMaverick新しい行が埋め込まれたテキストにバインドしている場合、それらはおそらくXMLセンチネルではなく、実際のchar 10値(または13)である必要があります。これは、XAML ファイルにリテラルの改行を書きたい場合のみです。
電球が切れた!
SQL 関数に入り、改行のテキスト表現を ... に置き換えました。
CHAR( 13 ) + CHAR( 10 )
...私のバインディングからコンバーターを削除し、TextBlock.Textちょうどそのように...うまくいきました!