在wpf应用程序中使用winforms webbrowser导航到URL

时间:2015-07-22 11:44:09

标签: c# .net wpf winforms .net-4.0

我正在构建一个包含WebBrowser的WPF应用程序。我想在webbrowser中使用Document.GetElementByID方法,我的理解是在WPF中最简单的方法是使用winforms webbrowser和WindowsFormsIntegration(如果有更好的方法请告诉我)

我在浏览网址时遇到问题。在调试模式下运行程序不会引发任何错误,并且单步执行导航代码仍会使我的webbrowser具有以下属性:

wb1.ReadyState = Uninitialized
wb1.Url = null

我错过了导航到网址的内容吗?我可以在WPF webbrowser中使用Document.GetElementById方法吗?

XAML:

<Window x:Class="my program's main window"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
...
<WindowsFormsHost Name="wfh">
    <WindowsFormsHost.Child>
        <wf:WebBrowser/>
    </WindowsFormsHost.Child>
</WindowsFormsHost>

代码:

var wb1 = wfh.Child as System.Windows.Forms.WebBrowser;
wb1.Navigate("my url here");
while (wb1.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
    // this loop never ends because neither readystate nor wb1.Url ever change
}

1 个答案:

答案 0 :(得分:1)

Microsoft.mshtml(来自Assembies&gt; Extensions)的引用添加到您的项目中。然后使用WPF WebBrowser控件并将其Document属性强制转换为HTMLDocument

<WebBrowser x:Name="webBrowser" Navigated="WebBrowserNavigated" />

代码背后:

using mshtml;
...

webBrowser.Navigate("...");
...

private void WebBrowserNavigated(object sender, NavigationEventArgs e)
{
    var document = webBrowser.Document as HTMLDocument;
    ...
}