2017-06-27 4 views
0

私は、ユーザーがTextBoxにテキストを入力できるようにするWPFアプリケーションを作成しています。このテキストには、テキストをHTMLに変換するためのMarkdownDeepオブジェクトによって評価されるMarkdown構文が含まれている場合があります。私はこの出力を受け取り、NavigateToStringを呼び出してWebBrowserコントロールに送ります。つまり、WebBrowserコントロールは実際にインターネットにアクセスすることはありません。レンダリングされた出力を表示するための媒体にすぎません。一般に、このアプローチは非常にうまく動作し、結果に非常に満足しています。WPF WebブラウザーでPrettifyを実行して構文の強調表示を適用するにはどうすればよいですか?

ここで私はユーザーが実際のコードを入力できる新しい機能を追加しようとしています。また、HTML出力にはコードブロックの構文強調があります(StackOverflowと同じように)。 MarkdownDeepには、プログラマーが独自の構文ハイライトを挿入できるようにする、本当に素晴らしいフックがあります。彼らのウェブサイトからthis exampleを使いたかったのです。しかし、実際にPrettifyスクリプトを実行するのに問題があります。私はPrettify NuGet packageを追加して、私のソリューションにたくさんのスクリプトを追加しました。私はWPFアプリケーションでそれらを実行する方法を知らないし、オンラインで見つかったすべての例はASP.NETのものだった。

WebBrowserのInvokeScriptメソッドを使用してスクリプトを手動で実行しようとしましたが、フォルダ構造内に表示されているにもかかわらず、スクリプトが存在しないことを示すCOMExceptionが表示されます。 HTMLの文字列を考えると、どのように私は飾り立てるJavaScriptのスクリプトを適用することができます。

// 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"); 
} 

は、私は私の質問は、このように要約することができると思いますか?

【それが役立つ場合、私はMVCE here例としてプロジェクトの完全なソースが含まれている]

+0

https://stackoverflow.com/a/9815114/1271037 – dovid

答えて

0

例えば使用絶対パスでスクリプトを渡し

System.AppDomain.CurrentDomain.BaseDirectory 

出力ディレクトリにファイルをコピーすることを忘れないでください。 Visual Studioでこれを自動的に行うことができます(ファイルを「コンテンツ」としてマークし、プロパティタブで「コピー」を選択)

関連する問題