【问题标题】:Is it possible to spawn a truly separate window in a Silverlight application?是否可以在 Silverlight 应用程序中生成一个真正独立的窗口?
【发布时间】:2009-11-13 22:02:17
【问题描述】:

我试图找到一个明确的“不”,但没有成功。理想情况下,我想让我的 Silverlight 应用程序典当额外的窗口。我不是说 ChildWindows 仅限于宿主 Silverlight 窗口的边界,而是一个真正独立的窗口,甚至可以出现在任务栏中。在 WPF 中,您使用 System.Windows.Window 及其属性(例如 ShowInTaskbar);但是,该类对 Silverlight 不可用。

理想情况下,我的应用程序会生成单独的窗口,就像 Outlook 在您打开联系人或约会的完整详细信息时所做的那样。我不希望有一个单独的浏览器窗口托管 Silverlight 应用程序的单独视图(理论上,这可以通过一些棘手的 DOM 级 JavaScript 窗口间通信来实现)。

我假设这是 Silverlight 的计算限制之一。但在我放弃之前,我想听听别人说,不,我不能生成单独的顶级窗口。

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    您可以打开另一个包含相同 XAP 的浏览器窗口(通过 JavaScript 调用),并让您的 Silverlight 应用程序在启动时确定它应该显示的视图。这个新的子窗口和主窗口之间的通信不是通过 DOM 级别的 JavaScript,而是通过使用非常简单的 Local Messaging 完成的。

    【讨论】:

    • 这很有趣,我一定会调查的。谢谢!
    【解决方案2】:

    不,您不能生成单独的顶级窗口。

    最好的办法是使用 HyperlinkBut​​ton 打开一个包含另一个 Silverlight 插件的新浏览器窗口。

    【讨论】:

    • 感谢您验证我的怀疑!
    【解决方案3】:

    我还没有理由尝试它,但您可以尝试在托管您的主应用程序的浏览器中创建额外的 Silverlight 控件。

    Microsoft 有一个 Silverlight.js 库,可以相当轻松地使用 Javascript 将 Silverlight 控件即时添加到您的 HTML DOM。

    您可以在 HTML 文档中为窗口浮动 DIV,或使用简单的选项卡控件,例如 Jquery Tabs。动态添加标签看起来很简单。

    这可能是最接近拥有多个“窗口”的方式,而且它仍然是一个不错的现代网络应用程序。不过,我会做一些仔细的性能测试,尤其是当您的 XAP 文件很大时。

    【讨论】:

      【解决方案4】:

      我认为不可能在一个 silverlight 应用程序中生成单独的窗口。

      您可以从多个较小的 xap 文件构建您的应用程序,例如使用 Prism。这将使初始下载更小,并使您能够在不同的浏览器窗口中显示部分。

      从代码中显示一个单独的浏览器窗口非常简单。看看System.Windows.Browser。最后,您只需要像这样打开一个新窗口:

      HtmlPage.PopupWindow(new Uri("http://localhost/Email.xap?showmessage=1234"), 
                           "_blanc", new HtmlPopupWindowOptions());
      

      【讨论】:

        猜你喜欢
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多