C#/ WPF:将string中的HTML呈现到WPF控件上

我正在编写一个程序来显示使用网格Excel工作表的内容。 为此,我使用Office Interop将这个工作表作为一个充满XML的大string来检索,如下所示:

// Get the cells Range from Excel: Range rng = sheet.get_Range(Cell(row1, col1), Cell(row2, col2)); // Get the XML representing that Range: return rng.get_Value(XlRangeValueDataType.xlRangeValueXMLSpreadsheet); 

我可以从这个XMLstring创build一个FlowDocument,如果我将它分配给我的GUI上的控件,那么该控件将呈现XML,使其看起来完全像Excel显示。 但是我将范围中的所有单元格渲染到单个控件上,这不是我想要的:我希望能够将任何给定的单元格渲染到任何给定的控件上。

我无法find一个快速,优雅的方法来通过Interop为单个单元格提取XML:它只需要一个星期的时间。 于是我花了一整天的时间编写一个类,把大的XMLstringparsing成一个代表一个单元格的XML片段数组。 该数组中的string如下所示:

 <Cell><ss:Data ss:Type="String" xmlns="http://www.w3.org/TR/REC-html40"><Font html:Color="#000000">Some random text with </Font><B><Font html:Color="#000000">some bold characters</Font></B><Font html:Color="#000000">, and so on and so forth</Font></ss:Data></Cell> 

这实际上是HTML:从Visual Studio的debugging器我可以使用HTML查看器,它会告诉我这个:

一些粗体字符的随机文本,等等等等

顺便说一下,一旦我粘贴,Stack Overflow网站就会正确地显示这条线。

所以我感到非常自信,现在我可以用编程的方式为每个Excel单元格创buildFlowDocument对象,将它们分配给我的GUI控件,并且在任何我喜欢编程的布局中都能很好地呈现我的Excel单元格。

除了这个不行。 当我把FlowDocument放入一个控件时,控件只显示HTML源代码,它不会渲染它。

以下是我如何创buildFlowDocument:

 FlowDocument tmp = new FlowDocument(); TextRange tr = new TextRange(tmp.ContentStart, tmp.ContentEnd); byte[] byteArray = Encoding.ASCII.GetBytes(string_full_of_html); MemoryStream stream = new MemoryStream(byteArray); tr.Load(stream, DataFormats.Rtf); 

(解释:我分配一个FlowDocument,然后创build一个TextRange,通过它我将加载HTML,然后将我的string充满HTML成stream,然后将该stream馈送到TextRange)

我试过不同的“DataFormats”:奇怪的是,HTML不起作用。 它给了我例外“不支持HTML格式”的数据格式。 RTF的作品,但像HTML一样,只显示我喂的string,它不会渲染它。

Visual Studio可以使用“HTML Visualizer”呈现我的XMLstring,而且我知道它是用WPF编写的。 所以我知道有一个机制在那里做我所需要的,但我找不到它。 那就是你进来的地方,勇敢的代码杰迪斯!