4

我正在创建一个 WPF(在 c# 中)应用程序,它将根据它的输出创建 html 文件。有没有办法在桌面应用程序中使用 html“视图”的概念(来自 asp.net mvc)而无需重新发明轮子?基本上我只想在 html 中保存一个输出项目列表,这在 Web 应用程序中非常简单(甚至在 wpf 桌面应用程序中使用绑定来显示窗口中的输出),但对于桌面应用程序中的 HTML 输出来说似乎很笨重我觉得就像我要重新发明轮子,在我的数据输出程序中包含灵活的 html 模板。

当然有一种快速而优雅的方式来做到这一点?

例如,假设程序的输出是名称列表(Bill、Bob、Jill、Frank),我想将以下 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 文件?

4

1 回答 1

2

以易于序列化为 XML 的形式存储您的数据——在实现 XML 序列化的类或 ADO.NETDataSet中。编写用于将 XML 转换为 XHTML 的 XSLT 模板。使用类实现转换XslCompiledTemplate

当然,这种方法需要你学习一些你可能不太了解的东西。XSLT 不是微不足道的,XML、XSLT 和 HTML 中的一些微妙之处会不时让您感到困惑。但是一旦你学会了它,它就是一个令人难以置信的强大技术组合。十年来我没有手工制作过 HTML 文档。我必须生成的任何HTML 文档的起点是包含其内容的 XML 文档和用于呈现内容的 XSLT 转换。

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

将输出输入 WPF UI 的另一种更难的方法是完全绕过 HTML,并编写一个 XSLT 转换,将数据呈现为FlowDocumentXAML 中的 a。它本身实际上并不难,它只是引入了一堆你必须考虑的新问题——而且,如果 HTML 生产真的是它的全部内容,它可能完全不适合你的应用程序。但是,一旦您知道如何将 XML 数据转换为 HTML,将其转换为 XAML 就是小菜一碟了。

于 2010-08-08T18:38:05.737 回答