我有一个错误返回字符串,有时是纯文本,有时是HTML。我的想法是在WebBrowser控件中显示它。我发现这个article显示了如何将字符串指定为webBrowser的内容。这是我的XAML:
<WebBrowser
local:BrowserBehavior.Html="{Binding ElementName=resultListBox, Path=SelectedItem.Details}"
Width="400" MinHeight="50" Margin="0">
</WebBrowser>
它工作正常,但普通字符串有时会显示罗马字体。有没有办法将样式表注入WebBrowser控件?或者首先是我的问题有更好的解决方案吗?
答案 0 :(得分: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 ?? " ");
}
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
参考才能发挥作用。
这会在导航到LoadCompleted
之前附加string
事件处理程序。在处理程序中,它获取head
元素,创建一个新的style
标记并添加所需的CSS规则。