我正在使用这个 HtmlFromXamlConverter来自微软并试图在 RichTextBox 上显示 html 脚本。 HtmlToXamlConverter 工作正常,但 HtmlFromXamlConverter 不行。
例子:
#Part.143
<p><b><font size="5">Wundklassifikation Diabetisches Fußsyndrom nach Wagner</font></b></p>
<b>Grad 0</b><br>Keine Läsion, evtl. Fußdeformation oder Cellulitis<br><br>
<b>Grad 1</b><br>Oberflächliches Ulkus<br><br>
<b>Grad 2</b><br>Tiefes Ulkus bis zur Gelenkkapel<br><br>
<b>Grad 3</b><br>Tiefes Ulkus mit Abszedierung, Osteomyelitis, Infektion der Gelenkkapsel<br><br>
<b>Grad 4</b><br>Begrenzte Vorfuß- oder Fersennekrose<br><br>
<b>Grad 5</b><br>Nekrose des gesamten Fußes<br><br>
如果我使用 HtmlToXamlConverter 将此 html 脚本转换为 XAML 脚本, 它在 RichTextBox 上显示如下: Screenshot from RichTextBox
然后当我使用 HtmlFromXamlConverter 将它从 XAML 转换回 html 时并使用生成的html代码显示在RichTextBox上,在RichTextBox上显示如下: Screenshot from RichTextBox (不再包括换行符)
这是我用来与 XAML 相互转换的 C# 代码
将 html 转换为 Xaml:
if(XamlReader.Parse(HtmlToXamlConverter.ConvertHtmlToXaml(File.ReadAllText(@"C:\Users\XXX\Documents\testHtml.html"), true)) is FlowDocument flowDoc)
{
RichTextBox.Document = flowDoc;
}
从 Xaml 转换回 html:
string str1 = XamlWriter.Save(RichTextBox.Document);
string str = XamlToHtmlConverter.ConvertXamlToHtml(str1);
我试了好久都没成功。我很感激你的帮助
最佳答案
看起来这是转换器不对称的情况。
试试这个:
- 在文件中查找(在 Visual Studio 中为 Ctrl-Shift-F),然后搜索
"Paragraph"
.您会看到它在 ToXaml 和 FromXaml 中都有匹配项。他们负责转换<p>
至<Paragraph>
反之亦然。 - 现在寻找
"LineBreak"
.这是您问题的原因;它仅存在于 ToXaml 中,反之则不然。
解决方案是在 HtmlFromXamlConverter 中添加一个 LineBreak 处理程序。只需将它添加到段落处理程序旁边即可。
case "Paragraph":
htmlElementName = "p";
break;
// Add these:
case "LineBreak":
htmlElementName = "br";
break;
应该这样做。
注意:我希望你没有使用 <hr>
因为这是另一个行不通的问题,而且更难修复。
关于c# - 为什么 HtmlParser 会删除换行符标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667057/