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

时间:2009-01-22 18:04:52

标签: wpf web-applications

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

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

所以这是我的问题:

  1. 如何在我的WPF应用中托管网页
  2. 我怎样才能隐藏/删除按钮,这取决于我是否在我的WPF应用程序内部而不是像IE浏览器这样的内容?
  3. 如果在浏览器中点击链接或按钮,WPF应用程序如何对这些点击作出反应并打开应用程序内的相关屏幕?
  4. 什么是更好的方法?
  5. 我意识到这个想法可能很糟糕,所以不要因为它而激怒我。我只是想用正确的方法为管理层提供支持。欢迎提出所有建议。

    谢谢!

2 个答案:

答案 0 :(得分:36)

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

<Grid>
    <WebBrowser Name="browser" />
</Grid>

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

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);
        }
    }
}

最后在您的页面中,您必须使用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>

答案 1 :(得分:13)

o,你应该添加 saved from url=(0014)about:internet comment 在head标签上方使IE不阻止javascript