我正试图找到一个明确的“不”,但一直没有成功。理想情况下,我想让我的Silverlight应用程序典当额外的窗口。我不是指ChildWindows仅限于主机Silverlight窗口的边界,而是一个真正独立的窗口,甚至可以出现在任务栏中。在WPF中,您使用System.Windows.Window及其属性(例如ShowInTaskbar);但是,Silverlight无法使用该类。
理想情况下,我的应用程序会生成单独的窗口,就像Outlook打开联系人或约会的完整详细信息时那样。我不希望单独的浏览器窗口托管Silverlight应用程序的单独视图(理论上,这可以通过一些棘手的DOM级JavaScript窗口间通信来工作)。
我的假设是这是Silverlight的计算限制之一。但是在我放弃之前,我想从其他人那里听到,不,我不能产生一个单独的顶级窗口。
答案 0 :(得分:3)
您可以打开另一个包含相同XAP的浏览器窗口(通过JavaScript调用),并在启动时使您的Silverlight应用程序确定它应显示的视图。这个新子窗口和主窗口之间的通信不是通过DOM级别的JavaScript,而是通过Local Messaging来完成的,这非常简单易用。
答案 1 :(得分:1)
不,你不能产生一个单独的顶级窗口。
您可以做的最好的事情是使用HyperlinkButton打开一个包含另一个Silverlight插件的新浏览器窗口。
答案 2 :(得分:0)
我还没有理由尝试它,但您可以尝试在托管主应用程序的浏览器中创建其他Silverlight控件。
Microsoft有一个Silverlight.js库,可以很容易地使用Javascript动态地将Silverlight控件添加到HTML DOM中。
您可以在HTML文档中为窗口浮动DIV,或使用简单的选项卡控件,例如Jquery Tabs。动态添加标签看起来非常简单。
这可能是您拥有多个“窗口”的最接近的地方,它仍然会像一个漂亮的现代网络应用程序。不过,我会做一些仔细的性能测试,特别是如果你的XAP文件很大的话。
答案 3 :(得分:0)
我认为在一个silverlight应用程序中生成单独的窗口是不可能的。
您可以使用Prism从多个较小的xap文件构建应用程序。这将使初始下载更小,并使您能够在不同的浏览器窗口中显示部件。
通过代码显示单独的浏览器窗口非常简单。看看System.Windows.Browser。最后,您需要的就是打开一个新窗口:
HtmlPage.PopupWindow(new Uri("http://localhost/Email.xap?showmessage=1234"),
"_blanc", new HtmlPopupWindowOptions());