一个适用于Windows Forms的所见即所得Markdown控件?

14

[我们有一个Windows Forms数据库前端应用程序,可用作CMS的一部分;客户创建结构,填充内容,然后使用基于ASP.NET WebForms的网站将结果公开在Web上。为了增加灵活性,他们有时被迫直接在文本字段中输入实际的HTML标记,然后该标记以varchar形式出现在数据库中。这可以工作,但离用户友好还有很大差距。]

因此...一些客户希望获得用于HTML的所见即所得编辑器。我想说服他们从使用更简单的语言(即Markdown)中受益。理想情况下,我想要一个WYSIWYG编辑器。他们不需要表格或任何复杂的东西。

一个初步搜索发现了.NET Markdown转HTML转换器,然后我们有基于Windows Forms的文本编辑器可以输出HTML,但显然没有将两者结合起来的东西。因此,我们仍然会在varchars中保存标记,但至少它既易于人类阅读又容易解析。

这个——一个可以输出Markdown的所见即所得编辑器,然后在ASP.NET中将其解析为HTML——可行吗?有任何替代建议吗?

5个回答

19

我认为最好的方法是结合以下两种:

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

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

Nuget > Markdig

一个简单的实现可能是:

  1. Form控件上添加一个SplitContainer,设置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;
}

这里是一个录制的演示:

演示屏幕共享


非常强大,但现在我必须为Web浏览器实现特殊的暗模式,因为它与我的主题功能完全不兼容。 - Galacticai
1
这是一个完美的答案,应该标记为正确答案。 - user3147973
webbrowser.DocumentText在设置字符串后可能为空。为了避免这种情况,请查看此评论。 - Jules_96

0

@Soeren,

你绝对可以在 Windows Forms 应用程序中嵌入 IE 和 Javascript Markdown 编辑器。


0
RichTextBox控件
想使用Markdown,但又不想让用户知道吗?这可能是一个难以实现的目标。我认为Markdown的重点是面向愿意学习一些自然语法并在纯文本中编辑所有内容的作者(像维基百科?是否有纯WYSIWYG编辑器?可能有...并且可能会有其他维基百科编辑人员来清理生成的标记和格式...)。如果您希望对用户透明(像MS Word),则Markdown可能不是您想要的或在该情况下给您宣传的优势。

输入发生在Windows Forms中
糟糕!现在我更好地理解了你的问题。我想这取决于你的Windows Forms应用程序的外观,嵌入的IE控件是否显得很突兀。如果您尝试一下,您可能会发现可以使其正常工作。[1]

在您的位置上,我会尝试类似于这样的东西[2]:

如果您认为这种排列方式不会得到您的用户的好评(特别是在纯文本窗口中编辑),那么我认为Markdown可能并不适用于您的特定应用程序。 如果您认为您的用户热衷于编辑纯文本,那么我相信我们可以找到解决方案。请澄清一下?

Jared。

[1] 我成功地将IE HTML控件嵌入到项目中,严格用于显示生成的结果作为PDF(使用像Adobe Reader或Foxit这样的IE Reader插件)。 用户不知道GUI的那部分是IE控件,它只显示PDF,允许打印和保存等操作。

[2] ...但移除边框并使两个分割控件触及嵌入式IE控件的四个边缘,或者非常接近...例如保持浅灰色或白色,并消除IE控件的任何边框,使其融入周围的控件中。也许将其放在自己的选项卡页上,并向非技术用户展示/关注它是否为HTML控件或本机控件。

我可能完全错了(人们必须看到这个过程才能确定它是否有效),但这可能比编写自己的交互式Markdown编辑器更容易...

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


-1
“所见即所得的Markdown”实际上是个矛盾词,因为Markdown的整个目的就是让你能够自然而直观地编写标记语法,然后将其后处理为HTML,除非你指的是将例如**文本**渲染为**文本**。这样做确实很酷,但对于像有序和无序列表这样的东西来说会变得非常困难,因为你必须进行所有的定位,同时保持一切基于实际的文本字符(例如'*'代替项目符号),并支持正确的文本输入定位、退格等。
  • 例如,在这个项目列表中,
  • 项目符号实际上应该是星号,
  • 而间距实际上并不存在。

如果有人真的解决了这个问题,那肯定值得关注。


-1

你不能直接使用Stack Overflow中的控件(我们都在其中输入)---WMD,并将Markdown存储到VARCHAR中吗?然后只需使用.NET Markdown转换为HTML,如您所提到的,按需显示HTML。Jeff在StackOverflow播客中更详细地讨论了这个问题(不知道是哪一集)。


3
楼主明确指出了 WINDOWS FORMS。 - nathanchere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接