From af0e1de491718e2af8ddda2a2a8e1b335ab1c4fd Mon Sep 17 00:00:00 2001 From: elyoh Date: Sat, 1 Feb 2025 16:10:24 +0000 Subject: [PATCH] Update XamlToRtfWriter.cs Fixes #7601. Remove any XAML escape sequences from the NavigateUri value before escaping for RTF. --- .../Windows/Documents/XamlToRtfWriter.cs | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/XamlToRtfWriter.cs b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/XamlToRtfWriter.cs index 039ffcf8f83..f7377fc41c7 100644 --- a/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/XamlToRtfWriter.cs +++ b/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/XamlToRtfWriter.cs @@ -834,23 +834,7 @@ private void WriteInlineChild(DocumentNode documentNode) if (documentNode.Type == DocumentNodeType.dnHyperlink && !string.IsNullOrEmpty(documentNode.NavigateUri)) { _rtfBuilder.Append("{\\field{\\*\\fldinst { HYPERLINK \""); - - // Unescape the escape sequences added in Xaml - documentNode.NavigateUri = BamlResourceContentUtil.UnescapeString(documentNode.NavigateUri); - - // Add the additional backslash which rtf expected - for (int i = 0; i < documentNode.NavigateUri.Length; i++) - { - if (documentNode.NavigateUri[i] == '\\') - { - _rtfBuilder.Append("\\\\"); - } - else - { - _rtfBuilder.Append(documentNode.NavigateUri[i]); - } - } - + _rtfBuilder.Append(documentNode.NavigateUri); _rtfBuilder.Append("\" }}{\\fldrslt {"); } else @@ -3057,9 +3041,12 @@ private XamlToRtfError HandleAttributes(ConverterState converterState, IXamlAttr case XamlAttribute.XANavigateUri: if (xamlTag == XamlTag.XTHyperlink && valueString.Length > 0) { + // Unescape the escape sequences added in Xaml + documentNode.NavigateUri = BamlResourceContentUtil.UnescapeString(valueString); + StringBuilder sb = new StringBuilder(); - XamlParserHelper.AppendRTFText(sb, valueString, 0); + XamlParserHelper.AppendRTFText(sb, documentNode.NavigateUri, 0); documentNode.NavigateUri = sb.ToString(); } break;