12

[我们有一个 Windows Forms 数据库前端应用程序,除其他外,它可以用作 CMS;客户端创建结构,填充它,然后使用基于 ASP.NET WebForms 的站点在 Web 上公开展示结果。为了增加灵活性,他们有时被迫将实际的 HTML 标记直接输入到文本字段中,然后在数据库中以 varchar 形式结束。这可行,但远非用户友好。]

因此……一些客户想要一个所见即所得的 HTML 编辑器。我想说服他们相信他们会从使用更简单的语言(即 Markdown)中受益。理想情况下,我想要的是一个所见即所得的编辑器。他们不需要桌子,或者任何类似的复杂的东西。

粗略搜索会发现一个 .NET Markdown 到 HTML 转换器,然后我们有一个基于 Windows 窗体的文本编辑器,它输出 HTML,但显然没有任何东西可以将两者结合在一起。结果,我们仍然可以在其中保留带有标记的 varchars,但至少它既易于人类阅读,又易于解析。

这——一个输出 Markdown 的 WYSIWYG 编辑器,然后在 ASP.NET 中解析成 HTML——是否可行?有什么替代建议吗?

4

5 回答 5

11

我认为最好的方法是结合

  1. 将 Markdown 转换为 HTML &
  2. 在 WinForms 中显示 HTML

最新的 Markdown 库似乎是markdig,您可以通过 nuget安装它

Nuget > Markdig

一个简单的实现可能是:

  1. 添加一个SplitContainerForm控件,设置Dock = Fill
  2. 添加一个TextBox,设置Dock = Fill并设置为Multiline = True
  3. 添加一个WebBrowser,设置Dock = Fill

然后处理TextChanged事件,将文本解析成html并设置成DocumentText这样:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var md = textBox1.Text;
    var html = Markdig.Markdown.ToHtml(md);
    webBrowser1.DocumentText = html;
}

这是一个录制的演示:

演示屏幕共享

于 2019-11-20T22:43:40.963 回答
1

@Soeren,

您绝对可以在 Windows 窗体应用程序中嵌入带有 Javascript Markdown 编辑器的 IE。

于 2008-08-28T06:59:42.543 回答
-1

RichTextBox 控件

所以你想使用 Markdown 但你不希望用户知道它?这可能不是一个可以实现的目标。我认为 Markdown 的重点在于它面向愿意学习一点相当自然的语法并以纯文本形式编辑所有内容的作者(比如 Wikipedia?是否有纯粹的 WYSIWYG 编辑器呢?可能......可能还有一些其他维基百科编辑人员必须来清理生成的标记和格式......)。如果您希望它对用户透明(如 MS Word),Markdown 可能不是您想要的,或者在这种情况下给您它所宣传的优势。

输入发生在 Windows 窗体中

哎呀!现在我更好地理解了你的问题。我想这取决于您的 Windows 窗体应用程序的外观,嵌入式 IE 控件是否像拇指酸痛一样突出。如果你尝试一下,你可能会发现你可以让它工作。[1]

在你的位置上,我会尝试这样的事情 [2]:

如果您认为这种安排不能很好地满足您的用户(尤其是纯文本窗口中的所有编辑),那么我再次认为 Markdown 不是您特定应用程序的答案。如果您认为您的用户热衷于编辑纯文本的想法,那么我敢打赌我们可以找到解决方案。请说清楚?

杰瑞德。

[1] 我成功地将一个 IE HTML 控件严格放入项目中,以将一些生成的结果显示为 PDF(使用 IE 阅读器插件,如 Adob​​e Reader 或 Foxit)。用户不知道 GUI 的那部分是一个 IE 控件,它只是显示 PDF,允许打印和保存等。

[2] ...但删除边框并使两个拆分控件接触嵌入式 IE 控件的所有四个边缘,或者非常接近...例如保持浅灰色或白色,并消除 IE 的任何边框控制,使其融入周围的控制。也许把它放在它自己的标签页上,我挑战非技术用户告诉/关心它是 HTML 控件还是原生控件。

这一切我可能完全错了(必须亲眼看到它的实际效果才能确定它是否有效),但这可能比编写自己的交互式 Markdown 编辑器更容易......

...实际上要实现您自己的 C# Markdown 编辑器,您只需在嵌入式 IE 控件旁边放置一个文本编辑框,然后在单独的线程上通过 .NET Markdown->HTML 转换器运行当前 Markdown,然后将 HTML 替换为IE 控件(假设 Markdown->HTML 转换器非常自由且健壮,不会引发任何异常)。

于 2008-09-10T18:34:15.633 回答
-1

“WYSIWYG Markdown”实际上是一个矛盾,因为 Markdown 的全部意义在于让您自然而直观地编写标记语法,然后将其后处理为 html,除非您的意思是实际采用例如 **text** 并将其呈现为**文本** * 例如。这实际上有点酷,但是对于编号和项目符号列表之类的事情会变得非常困难,因为您必须进行所有定位,但要根据实际的文本字符(例如,'*' 而不是项目符号符号) ) 并支持正确的文本输入定位、退格等。

  • 例如,
  • 在这个项目符号列表中,
  • 子弹实际上必须是星号,
  • 并且间距不会真的存在。

如果有人确实解决了它,那当然值得关注。

于 2009-03-26T00:13:58.210 回答
-2

你不能只使用我在 Stack Overflow 使用的相同控件(我们都在输入)---WMD,并将 Markdown 存储在 VARCHAR 中。然后使用 .NET Markdown 到 HTML 转换器,如您所提到的,根据需要显示 HTML。Jeff 在 StackOverflow 播客中更详细地讨论了这一点(不知道剧集编号)。

于 2008-08-27T23:43:45.537 回答