1

私が抱えている問題は、「Browser」と呼ばれる WebBrowser コントロールがあることです。ブラウザーは、MEF によって作成されたさまざまなコントロールから取り込まれます。

 //Apply Button that cretes the HTML that is loaded into the Browser
 btnCreateHTMLPreview(object sender, RoutedEventArgs e)
 {
   //Clears the content of the observable collection
   contents.Clear();

   //usedControls is an observable collection of all loaded controls in the stack panel
   foreach(var control in usedControls)
      control.CreateHTML();
 }

 //Code in the MEF Control that creates the HTML that is will be loaded into the browser
 CreateHTML()
 {
   string tempStuff = null;
   tempStuff += "<h1>" + MyControl.lblHeader.Content + "</h1>\n";
   tempStuff += MyControl.txtTextGoesHere.Text + "\n";

   //Give the HTML back to the Application
   parent.AcceptReport(tempStuff);
 }

 //Application side where it accepts the HTML and loads it into the Browser
 AcceptHTML(string passedInContent)
 {
   //Observable collection that holds the content of all possible MEF Controls
   contents.Add(passedInContent);

   string tempStuffForBrowser = null;
   tempStuffForBrowser = "<html>\n";
   tempStuffForBrowser += "<body>\n";

   //Add the content that was saved earlier
   foreach (var strInd in contents)
      tempStuffForBrowser += strInd;

   tempStuffForBrowser = "<html>\n";
   tempStuffForBrowser += "<body>\n";

   Browser.NavigateToString(tempStuffForBrowser);
 }

上記で最善を尽くして、html に入力する方法の要点を提供し、それをブラウザーに追加し直しました。不明な点がある場合は、お知らせください。

コントロールを 1 つだけ追加して、ボタンをクリックして html をロードしたときに「コンテンツ」に 1 つのコントロールのみが含まれるようにすると、正常に機能してロードされます。ただし、複数のコントロールがロードされている場合は、そのボタンを 2 回クリックして表示します。これは非常に奇妙だと思いました。これを解決するための私の試みは、イベントを終了する前にブラウザにコンテンツがあるかどうかを確認することでしたが、これを行う方法がわかりません. 誰かがこの問題を解決する方法について提案やその他のアイデアを持っている場合は、私に知らせてください.

4

1 に答える 1

1

WebBrowser コントロールには、取得した最初の文字列が読み込まれないという問題があるようです。まだ行われていない初期化があると思います。私はそれを呼び出すことによってそれを働かせました

myBrowser.NavigateToString("");

クラスのコンストラクター内から、それを使用すると正しく機能しました。ホーキーですが、うまくいきます。

于 2012-10-31T18:59:55.150 に答える