2016-03-02 58 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规则。