Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF的不同选项卡中打开包含模式的链接_C#_Wpf_Cefsharp - Fatal编程技术网

C# 在WPF的不同选项卡中打开包含模式的链接

C# 在WPF的不同选项卡中打开包含模式的链接,c#,wpf,cefsharp,C#,Wpf,Cefsharp,我有一个应用程序,在一个选项卡控件中有两个选项卡,每个选项卡都包含一个CefSharp ChromiumWebBrowser。让我们将这些ChromiumWebBrowser称为searchBrowser和detailsBrowser 假设我在searchBrowser中单击一个链接,如果该链接包含文本“xrep2”,我希望该链接在detailsBrowser中打开,否则应该在searchBrowser中打开 在这个应用程序的早期版本中,我使用了WinForms web浏览器控件。我正在WPF中

我有一个应用程序,在一个选项卡控件中有两个选项卡,每个选项卡都包含一个CefSharp ChromiumWebBrowser。让我们将这些ChromiumWebBrowser称为
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方法,以获取从事件返回结果的示例。