【问题标题】:How can I run Prettify in a WPF WebBrowser to apply syntax highlighting?如何在 WPF WebBrowser 中运行 Prettify 以应用语法突出显示?
【发布时间】:2017-06-27 22:09:38
【问题描述】:

我正在创建一个允许用户在 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]

【问题讨论】:

标签: c# wpf markdown prettify markdowndeep


【解决方案1】:

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

 System.AppDomain.CurrentDomain.BaseDirectory 

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多