[[我们有一个Windows Forms数据库前端应用程序,除其他外,它可以用作CMS;客户创建结构,填充它,然后使用基于ASP.NET WebForms的站点将结果公开显示在Web上。为了增加灵活性,有时会迫使他们直接在文本字段中输入实际的HTML标记,然后在数据库中将其作为varchar结束。这可行,但远非用户友好。]
因此,某些客户需要HTML的WYSIWYG编辑器。我想说服他们,他们将从使用更简单的语言(即Markdown)中受益。理想情况下,我想要的是所见即所得的编辑器。他们不需要桌子或类似的东西。
粗略的搜索显示a .NET Markdown to HTML converter,然后得到a Windows Forms-based text editor that outputs HTML,但显然没有什么可以将两者结合在一起。结果,我们仍然可以在其中保留带有标记的varchars,但至少它是既易于阅读又易于解析的。
这-输出Markdown的WYSIWYG编辑器,然后在ASP.NET中将其解析为HTML,是否可行?还有其他建议吗?
@@ Soeren,
您绝对可以将IE与Java Markdown编辑器一起嵌入Windows窗体应用程序中。
我认为最好的方法是结合使用
最新的Markdown库似乎是markdig,您可以安装via nuget
一个简单的实现可能是:
SplitContainer
添加到Form
控件,设置Dock = Fill
TextBox
,设置Dock = Fill
并设置为Multiline = True
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;
}
这里是录制的演示:
您不能只使用我栈溢出使用的相同控件(我们都在其中键入)--- WMD,然后将Markdown存储在VARCHAR中。然后,如前所述,使用.NET Markdown到HTML转换器,根据需要显示HTML。 Jeff在StackOverflow播客中更详细地讨论了这一点(不知道剧集的编号)。
RichTextBox控件
所以您想使用Markdown,但又希望用户不知道吗?这可能不是可以实现的目标。我认为Markdown的目的是针对那些愿意学习相当自然的语法并以纯文本编辑所有内容的作家(例如Wikipedia?是否有纯粹的WYSIWYG编辑器?也许...以及可能维基百科的其他编辑人员必须来清理结果标记和格式...)。如果您希望它对用户透明(例如MS Word),则Markdown可能不是您想要的,或者没有给您带来这种情况下广告的优势。
输入在Windows窗体中发生
糟糕!现在,我更好地理解了您的问题。我猜这取决于您的Windows Forms应用程序的外观,嵌入式IE控件是否像拇指一样伸出来。如果尝试使用它,可能会发现它可以正常工作。[1]
在您的位置,我会尝试这样的[2]:
[如果您认为这种安排不能很好地适应您的用户,(尤其是所有纯文本窗口中的编辑),那么我再也不认为Markdown是您特定应用程序的答案。如果您认为用户热衷于编辑纯文本的想法,那么我敢打赌,我们可以找到一个解决方案。请澄清?
讨厌。
[1]我成功地将IE HTML控件严格放入项目中,以将生成的某些结果显示为PDF(使用诸如Adobe Reader或Foxit之类的IE Reader插件)。用户不知道GUI的那部分是IE控件,只显示PDF,允许打印和保存,等等。
[2] ...但是删除边框,并使两个拆分控件接触嵌入式IE控件的所有四个边缘,或者变得非常接近...例如,使其保持浅灰色或白色,并消除边框IE控件,以便将其融合到周围的控件中。也许将其放在其自己的标签页上,然后我挑战非技术用户以告知/关心它是HTML控件还是本机控件。
我可能对所有这些都完全错了(必须在实际操作中确定它是否可以工作,但比编写自己的交互式Markdown编辑器更容易...
...实际上是要实现自己的C#Markdown编辑器,您只需在嵌入式IE控件旁边放置一个文本编辑框,然后通过.NET Markdown-> HTML转换器在单独的线程上运行当前的Markdown,然后替换IE控件中的HTML(假设Markdown-> HTML转换器非常自由并且健壮,可以防止抛出任何异常)。
“ WYSIWYG Markdown”实际上是一种矛盾,因为Markdown的全部目的是允许您自然而直观地编写标记语法,然后将其后处理为html,除非您实际上是指**文本**并将其呈现为** text * *。这实际上是很酷的,但是对于编号和项目符号列表之类的东西来说将变得非常困难,因为您将必须进行所有定位,但要使所有内容都基于实际的文字字符(例如,用'*'代替项目符号),并支持正确的文本输入位置,退格键等。
如果有人确实解决了,那肯定值得关注。