如何解决WPF应用程序与托管IExplorer之间的通信?

如何解决WPF应用程序与托管IExplorer之间的通信?,wpf,architecture,Wpf,Architecture,对于一个相当大的项目,我必须弄清楚如何(如果可能的话)解决这个问题。我有一个全屏WPF应用程序在做幻灯片放映,每张幻灯片的间隔为20秒。现在,我必须研究用URL代替幻灯片放映的可能性,让用户浏览幻灯片,而不是每10秒更换一次幻灯片。设置如下所示: 首先,将运行定时幻灯片放映,例如5张幻灯片 我显示我的网页并允许用户与网站交互(导航) 当用户做了某件事(这就是问题所在)网站将从“幻灯片”中删除,并恢复原来的幻灯片放映 显示的容器是一个WPF UserControl,其中包含一个事件,允许它更改到下

对于一个相当大的项目,我必须弄清楚如何(如果可能的话)解决这个问题。我有一个全屏WPF应用程序在做幻灯片放映,每张幻灯片的间隔为20秒。现在,我必须研究用URL代替幻灯片放映的可能性,让用户浏览幻灯片,而不是每10秒更换一次幻灯片。设置如下所示:

  • 首先,将运行定时幻灯片放映,例如5张幻灯片
  • 我显示我的网页并允许用户与网站交互(导航)
  • 当用户做了某件事(这就是问题所在)网站将从“幻灯片”中删除,并恢复原来的幻灯片放映
  • 显示的容器是一个WPF UserControl,其中包含一个事件,允许它更改到下一张幻灯片(调用next()方法)。IExporer托管在此控件中

    我面临的问题是:如何从网站上告知我的托管应用程序必须调用NExt()方法

    显示网站的IExplorer托管在我的WPF UserControl中。是否有任何方法可以访问某种事件或任何其他内容,以帮助我确定是否按下了特定页面或特定链接

    网络服务,光盘上的文件,随便你说,我随时准备尝试任何东西:-)


    任何建议或可能的解决方案都将不胜感激

    如果在WPF应用程序中使用WebBrowser控件,则可以使用html中的javascript调用C类。例如,假设您有一个类似于以下内容的类:

    [ComVisible(true)]
    public class JavaScriptBackEnd
    {
        public void onclick(string s)
        {
            MessageBox.Show(s);
        }
    }
    
    然后使用以下代码初始化WebBrowser控件:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        webBrowser1.ObjectForScripting = new JavaScriptBackEnd();
        webBrowser1.Navigate(new Uri(@"HTMLPage1.htm"));
    }
    
    从HTMLPage1.htm,现在可以使用以下javascript调用JavaScriptBackEnd.onclick方法:

    function testclick() {
        window.external.onclick('blabla');
    }
    

    如果在WPF应用程序中使用WebBrowser控件,则可以使用html中的javascript调用C类。例如,假设您有一个类似于以下内容的类:

    [ComVisible(true)]
    public class JavaScriptBackEnd
    {
        public void onclick(string s)
        {
            MessageBox.Show(s);
        }
    }
    
    然后使用以下代码初始化WebBrowser控件:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        webBrowser1.ObjectForScripting = new JavaScriptBackEnd();
        webBrowser1.Navigate(new Uri(@"HTMLPage1.htm"));
    }
    
    从HTMLPage1.htm,现在可以使用以下javascript调用JavaScriptBackEnd.onclick方法:

    function testclick() {
        window.external.onclick('blabla');
    }