输出html的WPF应用程序

时间:2010-08-08 15:13:26

标签: c# html xhtml html-generation

我正在创建一个WPF(在c#中)应用程序,它将根据它的输出创建html文件。有没有办法在桌面应用程序中使用html'view'的概念(来自asp.net mvc)而不重新发明轮子?基本上我只想在html中保存一个输出项目列表,这在web应用程序中是如此简单(甚至在wpf桌面应用程序中使用绑定来显示窗口中的输出)但在桌面应用程序中看起来很笨拙的HTML输出我觉得就像我要重新发明轮子,在我的数据输出程序中包含灵活的html模板。

当然有一种快速而优雅的方法可以做到这一点?谢谢!

编辑:

作为一个例子,该程序的输出是一个名称列表(比尔,鲍勃,吉尔,弗兰克),我想将以下HTML文件保存到磁盘:

<html>
<body>
<ul>
<li>Bill</li>
<li>Bob</li>
<li>Jill</li>
<li>Frank</li>
</ul>
</body>
</html>

如果用户定义了一个html模板,例如:

<html>
<body>
<ul>
<li><!-- user name --></li>
</ul>
</body>
</html>

如果用户定义了类似于以下内容的东西,可以在ASP.NET MVC中完成(或者在PHP,ruby等中以非常类似的方式完成):

<html>
<body>
<ul>
    <% foreach (string name in NameList) { %>
        <li>
        <%: name %>
        </li>
    <% } %>
</ul>
</body>
</html>

我想知道是否有一种简单的方法可以在桌面应用程序中使用该方法创建html文件?再次感谢大家!

1 个答案:

答案 0 :(得分:1)

将数据存储在易于序列化为XML的表单中 - 无论是在实现XML序列化的类中,还是在ADO.NET DataSet中。编写XSLT模板,将XML转换为XHTML。使用XslCompiledTemplate类实现转换。

当然,这种方法需要你学习一些你可能不太了解的东西。 XSLT并不是一件容易的事,XML,XSLT和HTML中的细微之处会让你不时绊倒。但是一旦你学会了它,它就是一种非常强大的技术组合。十年来我手工制作了一份HTML文档;我必须生成的任何 HTML文档的起点是一个包含其内容的XML文档和用于呈现内容的XSLT转换。

从WPF方面来说,您需要处理的唯一问题是在应用程序中显示呈现的HTML。我已经做到了这两种方式。一种方法是将WinForms WebBrowser控件包装在一个公开UserControl依赖项属性的Html中,这样我就可以将我的视图模型'Html属性绑定到它。 (视图模型都共享一个辅助类,用于获取XML并将其转换为HTML。)

将输出转换为WPF UI的另一种更难的方法是完全绕过HTML并编写一个XSLT转换,在XAML中将数据呈现为FlowDocument。它本身并不难,它只是介绍了一些你必须考虑的新问题 - 对于你的应用程序来说,如果HTML生产真的是它的全部内容,它可能完全不合适。但是,一旦你知道如何将XML数据转换为HTML,将其转换为XAML就是孩子的游戏。