托管WPF应用程序内的网页并与之交互

Mic*_*cah 20 wpf web-applications

我需要为LOB应用程序创建一个基于Web的仪表板工具.基本上,用户需要能够登录到一个网站,这将允许他们查看各种数据位的统计数据,以及查看与他们相关的任何通知.我们的主要应用程序是使用WPF为桌面构建的.我们还需要提供一个相同的仪表板,该仪表板将托管在我们的WPF应用程序中.主要区别在于,在WPF版本中,它们将具有按钮,这些按钮将打开应用程序的其他部分以对数据进行更改,或执行必要的任何操作.

主要问题是管理层只想编写可在Web和WPF shell中使用的1个版本.他们不想写入不同版本的UI.因此,解决方案是为Web编写仪表板,但将其托管在本地用户的桌面应用程序内,以及远程用户的浏览器中.

所以这是我的问题:

  1. 如何在我的WPF应用程序中托管网页
  2. 如何根据我是否在我的WPF应用程序内部而不是像IE浏览器这样的内容隐藏/删除按钮?
  3. 如果在浏览器中单击链接或按钮,WPF应用程序如何对这些点击做出反应并打开应用程序内的相关屏幕?
  4. 什么是更好的方法?

我意识到这个想法可能很糟糕,所以不要因为它而激怒我.我只是想用正确的方法为管理层提供支持.欢迎所有建议.

谢谢!

Yor*_*lov 38

您可以使用.NET 3.5 SP1中添加的WebBrowser控件在WPF应用程序中托管网页:

<Grid>
    <WebBrowser Name="browser" />
</Grid>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中,您必须将Uri设置为您的页面,并将一个对象(应该是com-visible)从java脚本中调用:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        string uri = AppDomain.CurrentDomain.BaseDirectory + "TestPage.html";
        this.browser.Navigate(new Uri(uri, UriKind.Absolute));
        this.browser.ObjectForScripting = new ScriptingHelper();
    }

    [ComVisible(true)]
    public class ScriptingHelper
    {
        public void ShowMessage(string message)
        {
            MessageBox.Show(message);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

最后在您的页面中,您必须使用window.external调用代码,如下所示:

<head>
    <title></title>

    <script type="text/javascript">
        function OnClick()
        {
            var message = "Hello!";
            window.external.ShowMessage(message);
        }
    </script>
</head>
<body>
    <a href="#" onclick="OnClick()">Click me</a>
</body>
Run Code Online (Sandbox Code Playgroud)


Yor*_*lov 13

o,你应该添加 从url =(0014)保存的关于: 头标记上方的互联网评论,以使IE不阻止javascript