C# 在WPF的不同选项卡中打开包含模式的链接
我有一个应用程序,在一个选项卡控件中有两个选项卡,每个选项卡都包含一个CefSharp ChromiumWebBrowser。让我们将这些ChromiumWebBrowser称为C# 在WPF的不同选项卡中打开包含模式的链接,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我有一个应用程序,在一个选项卡控件中有两个选项卡,每个选项卡都包含一个CefSharp ChromiumWebBrowser。让我们将这些ChromiumWebBrowser称为searchBrowser和detailsBrowser 假设我在searchBrowser中单击一个链接,如果该链接包含文本“xrep2”,我希望该链接在detailsBrowser中打开,否则应该在searchBrowser中打开 在这个应用程序的早期版本中,我使用了WinForms web浏览器控件。我正在WPF中
searchBrowser
和detailsBrowser
假设我在searchBrowser
中单击一个链接,如果该链接包含文本“xrep2”,我希望该链接在detailsBrowser
中打开,否则应该在searchBrowser
中打开
在这个应用程序的早期版本中,我使用了WinForms web浏览器控件。我正在WPF中重写应用程序并使用CefSharp。对于WinForms,它非常简单。在导航
事件中,您可以执行以下操作
private void browser_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (browser.StatusText.Contains("xrep2."))
{
e.Cancel = true;
detailsBrowser.Url = new Uri(browser.StatusText);
tabControl1.SelectedIndex = 1;
}
}
但在使用CefSharp时,似乎我必须在LifeSpanHandler per中创建一个事件,该事件在单击target=“\u blank”
链接时触发。我不太喜欢创建和订阅自定义事件,所以我想找到一种更简单的方法来实现这一点,但如果不是,我需要找出如何订阅一个方法来订阅由public event Action popurequest代码>和逻辑的放置位置(类似于if(searchBrowser.Address.Contains(“xrep2”))detailsBrowser.Address=X else searchBrowser.Address=X
我有下面的LifeSpanHandler类代码,包括当单击target=“\u blank”
链接时应该触发的PopupRequest事件,但我仍停留在这一点上
public class LifeSpanHandler : ILifeSpanHandler
{
public event Action<string> PopupRequest;
public virtual bool OnBeforePopup(IWebBrowser browserControl, string sourceUrl, string targetUrl, ref int x, ref int y, ref int width,
ref int height)
{
if (PopupRequest != null)
PopupRequest(targetUrl);
return true;
}
}
public类LifeSpanHandler:ILifeSpanHandler
{
公共事件行动要求;
公共虚拟bool OnBeforePopup(IWebBrowser浏览器浏览器控件、字符串源URL、字符串目标URL、ref int x、ref int y、ref int width、,
参考整数高度)
{
if(PopupRequest!=null)
PopupRequest(targetUrl);
返回true;
}
}
将您的逻辑放在OnBeforePopup方法中,使其工作,然后在需要时移动到使事件工作。例如,请参阅在if(popurequest!=null)popurequest(targetUrl);
和返回true
之间发布事件的请求处理程序。popurequest(targetUrl)有什么作用
如果事件调用了OnBeforePopup方法,该怎么办?我不理解您的问题。请查看我提供的链接中的OnBeforeBrowse方法,以获取从事件返回结果的示例。