我正在创建一个wpf应用程序,我正在使用webbrowser控件。无论如何有时我需要寻找html元素,调用点击和其他基本功能。
在winforms webbrowser控件中,我可以通过执行以下操作来实现:
webBrowser1.Document.GetElementById("someId").SetAttribute("value", "I change the value");
在wpf webbrowser控件中,我设法通过以下方式实现了同样的目的:
dynamic d = webBrowser1.Document;
var el = d.GetElementById("someId").SetAttribute("value", "I change the value");
我还设法通过使用动态类型调用wpf webbrowser控件中的单击。有时我会得到exeptions。
如何在wpf webbrowser控件中查找 html元素,设置属性并调用点击次数,而无需使用我常常遇到异常的动态类型?我想用wpf webbrowser控件替换我的wpf应用程序中的winforms webbrowser控件。
答案 0 :(得分:1)
使用以下命名空间,以此方式可以获取所有元素属性和事件处理程序属性:
using mshtml;
private mshtml.HTMLDocumentEvents2_Event documentEvents;
private mshtml.IHTMLDocument2 documentText;
在构造函数或xaml中设置LoadComplete事件:
webBrowser.LoadCompleted += webBrowser_LoadCompleted;
然后在该方法中创建新的webbrowser文档对象并查看可用属性并创建新事件,如下所示:
private void webBrowser_LoadCompleted(object sender, NavigationEventArgs e)
{
documentText = (IHTMLDocument2)webBrowserChat.Document; //this will access the document properties as needed
documentEvents = (HTMLDocumentEvents2_Event)webBrowserChat.Document; // this will access the events properties as needed
documentEvents.onkeydown += webBrowserChat_MouseDown;
documentEvents.oncontextmenu += webBrowserChat_ContextMenuOpening;
}
private void webBrowser_MouseDown(IHTMLEventObj pEvtObj)
{
pEvtObj.returnValue = false; // Stops key down
pEvtObj.returnValue = true; // Return value as pressed to be true;
}
private bool webBrowserChat_ContextMenuOpening(IHTMLEventObj pEvtObj)
{
return false; // ContextMenu wont open
// return true; ContextMenu will open
// Here you can create your custom contextmenu or whatever you want
}
答案 1 :(得分:-3)