如何在Silverlight应用程序中显示HTML?

Ric*_*nop 7 silverlight silverlight-4.0

我需要在Silverlight应用程序中显示一些基本的HTML(只是一些段落,无序列表和超链接).我该怎么办呢?

使用哪种控件?

Gon*_*ing 7

请尝试以下链接:http://www.wintellect.com/CS/blogs/jprosise/archive/2009/12/22/silverlight-4-s-new-html-hosting-support.aspx

以下是相关部分:

Silverlight 4为平台带来的另一项新功能是能够在Silverlight控件中托管HTML内容.这种支持不仅限于静态HTML内容; 内容可以是交互式的,可以包含脚本.它甚至可以是Flash内容或包含其他Silverlight控件的内容.

要在Silverlight中托管HTML内容,您可以使用WebBrowser控件或HtmlBrush.显示HTML内容的一种方法是启动WebBrowser控件并将其指向URL:

<WebBrowser x:Name="WebBrowserControl" Source="http://www.bing.com" />
Run Code Online (Sandbox Code Playgroud)

另一种方法是调用NavigateToString并将一串内容传递给WebBrowser控件:

WebBrowserControl.NavigateToString("<h1>Hello, Silverlight</h1>");
Run Code Online (Sandbox Code Playgroud)

浏览器内应用程序无法使用HTML托管(仅适用于浏览器外的应用程序),如果OOB缺少提升权限,则只能显示来自与Silverlight应用程序相同的域的内容.但是,您可以使用一个小技巧来显示在没有提升权限的情况下运行的OOB中的跨域内容 - 只需将针对远程内容的IFRAME传递给NavigateToString:

WebBrowserControl.NavigateToString("<iframe src=\"http://www.bing.com\" style=\"width: 100%; height: 100%\"></iframe>");
Run Code Online (Sandbox Code Playgroud)

您也可以使用HtmlBrush呈现HTML内容.以下XAML代码段绘制了一个Rectangle,其中包含从Bing检索到的内容:

<WebBrowser x:Name="WebBrowserControl" Source="http://www.bing.com" />
<Rectangle>
  <Rectangle.Fill>
    <HtmlBrush SourceName="WebBrowserControl" />
  </Rectangle.Fill>
</Rectangle>
Run Code Online (Sandbox Code Playgroud)

WebBrowser和HtmlBrush之间的一个区别是前者显示"实时"内容,而后者则不显示.另一个区别是HtmlBrush可以应用变换,而WebBrowser则不能.对于涉及HTML内容的时髦视觉效果,如在PDC上演示的HTML拼图,您可能会发现自己使用的是HtmlBrush.要显示实时的交互式内容,您会发现WebBrowser更有用.

关于WebBrowser控件的一个非常酷的事情是,您可以使用其InvokeScript方法在控件托管的内容中调用JavaScript函数.相反,在WebBrowser控件中托管的JavaScript可以使用window.external.Notify来引发可以在C#中处理的ScriptNotify事件.