2016-03-02 134 views
0

我有一個錯誤的返回字符串,有時是純文本,有時是HTML。我的想法是在WebBrowser控件中顯示。我發現這article顯示如何分配一個字符串作爲webBrowser的內容。這是我的XAML:WebBrowser控件中的控件樣式

<WebBrowser 
      local:BrowserBehavior.Html="{Binding ElementName=resultListBox, Path=SelectedItem.Details}" 
      Width="400" MinHeight="50" Margin="0"> 
     </WebBrowser> 

它工作正常,但普通字符串顯示在某些時候羅馬字體。有沒有辦法將樣式表注入WebBrowser控件?或者,首先是否有更好的解決方案來解決我的問題?

回答

1

您可以在附加屬性的代碼做到這一點:

static void OnHtmlChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) 
{ 
    WebBrowser webBrowser = dependencyObject as WebBrowser; 
    webBrowser.LoadCompleted += WebBrowserOnLoadCompleted; 
    if (webBrowser != null) 
     webBrowser.NavigateToString(e.NewValue as string ?? "&nbsp;"); 
} 

private static void WebBrowserOnLoadCompleted(object sender, NavigationEventArgs navigationEventArgs) 
{ 
    var webBrowser = sender as WebBrowser; 

    if (webBrowser != null) 
    { 
     var document = webBrowser.Document as mshtml.HTMLDocument; 

     if (document != null) 
     { 
      var head = document.getElementsByTagName("head").OfType<mshtml.HTMLHeadElement>().FirstOrDefault(); 

      if (head != null) 
      { 
       var styleSheet = (mshtml.IHTMLStyleSheet)document.createStyleSheet("", 0); 
       styleSheet.cssText = "* { background-color: purple; " + 
            " font-family: Arial, Helvetica, sans-serif; " + 
            " /* set whatever CSS rule you want */ }"; 
      } 
     } 

     webBrowser.LoadCompleted -= WebBrowserOnLoadCompleted; 
    } 
} 

你必須包括這工作Microsoft.mshtml參考。

這會在導航到string之前附加LoadCompleted事件處理程序。在處理程序中獲取head元素,創建一個新的style標記並添加所需的CSS規則。