如何在WPF WebBrowser中运行Prettify以应用语法高亮?

时间:2017-06-27 22:09:38

标签: c# wpf markdown prettify markdowndeep

我正在创建一个允许用户在TextBox中输入文本的WPF应用程序。此文本可能包含Markdown语法,由MarkdownDeep对象评估以将文本转换为HTML。我接受此输出并通过调用NavigateToString将其提供给WebBrowser控件。 (换句话说,WebBrowser控件从不实际访问互联网 - 它只是一种媒介,可以显示渲染的输出。)一般来说,这种方法非常有效,我对结果非常满意。

现在我尝试添加一个新功能,用户可以在其中输入实际代码,HTML输出将具有代码块的语法高亮(类似于StackOverflow的工作方式)。 MarkdownDeep有一个非常漂亮的钩子,允许程序员注入自己的语法高亮。我想从他们的网站上使用this example。但是,我实际上无法运行Prettify脚本。我添加了Prettify NuGet package,它为我的解决方案添加了一堆脚本。我不知道如何在WPF应用程序中运行它们,我在网上找到的所有示例都是针对ASP.NET的。

我尝试使用WebBrowser的InvokeScript方法手动运行脚本,但我只获得COMExceptions(这表示脚本"不存在",甚至虽然我可以在文件夹结构中看到它)。

// In XAML file
<WebBrowser x:Name="HtmlOutput"
            local:WebBrowserBehavior.Html="{Binding RenderedText}"
            LoadCompleted="OnLoadCompleted"/>

// In .cs code-behind
private void OnLoadCompleted(object sender, NavigationEventArgs e)
{
    HtmlOutput.InvokeScript("./Scripts/Prettify/run_prettify.js");
}

我想我的问题可以概括为:给定一串HTML,我如何应用Prettify JavaScript脚本?

[如果有帮助,我已将示例项目的完整来源包含为MVCE here]

1 个答案:

答案 0 :(得分:0)

使用例如将脚本作为绝对路径传递

 System.AppDomain.CurrentDomain.BaseDirectory 

并且不要忘记将文件复制到输出目录中。 Visual Studio可以自动为您执行此操作(将文件标记为“内容”并在属性选项卡中选择“复制”)