我正在创建一个允许用户在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]
答案 0 :(得分:0)
使用例如将脚本作为绝对路径传递
System.AppDomain.CurrentDomain.BaseDirectory
并且不要忘记将文件复制到输出目录中。 Visual Studio可以自动为您执行此操作(将文件标记为“内容”并在属性选项卡中选择“复制”)