Silverlight打印中“对话必须是用户启动的”安全例外的另一个诀窍

时间:2010-11-06 15:04:37

标签: visual-studio silverlight internet-explorer printing debugging

当我尝试在Silverlight中打印一些内容时,我得到了臭名昭着的“Dialogs必须是用户启动的”安全例外。如您所见,对话框由用户启动,可以是:

Silverlight printing "Dialogs must be user-initiated" Security Exception

John Papa couldn't help me much out neither,因为我没有设置断点。 Mr MSDN thinks it could also be that I'm just taking too long,但这是一个尽可能简单的演示应用程序。

有什么想法吗?我猜这是一个Visual Studio的怪癖,也许是一些扩展干扰,因为当我在它之外启动应用程序时似乎有效。我首先想到的可能是代码合同正在干扰他们的IL编织,但是他们在这个项目中被停用了。

更新:这只是一个从文件系统本地运行的简单Silverlight应用程序。当我执行“开始调试”时,Visual Studio会在Debug resp中创建一个包含Silverlight应用程序的托管HTML文件。释放项目的文件夹,使用该HTML文件启动Internet Explorer并将调试器附加到其中。

更新2:当我创建一个Web项目来托管Silverlight应用程序并在IIS上为它创建虚拟目录时,我也会遇到同样的错误。

我可能还想补充一点,我在其他Silverlight项目中打印没有问题,无论其托管方案如何。

更新3:我下载了FireFox并且它可以工作,我用它调试时没有收到错误。所以它似乎与我的IE8有关。我上传了解决方案:

http://dl.dropbox.com/u/10401470/Code/Demos/PrintingDemo.zip

我想知道是否有人可以复制?

任何人都知道我应该向哪个团队提交错误报告? Silverlight团队? IE团队? VS Debugger团队?

4 个答案:

答案 0 :(得分:1)

我也经历过这种奇怪的行为。标准按钮单击事件,立即调用OpenFileDialog。它在调试时经常会产生相同的错误,但最终会在多次单击按钮时被哄骗。

然而,当构建为一个版本时(或者可能只是通过运行相同的Xap而没有连接到浏览器的调试器)问题就会消失。

答案 1 :(得分:1)

尝试删除

if(SightPaleceListBox.Items.Count > 0)

答案 2 :(得分:1)

我能够重现这一点。您已经处理了Click两次,一次在XAML中再次处理代码。请参阅您的MainPage.xaml

<Button x:Name="PrintButton"
   Content="Gotta print 'em!" Margin="8" 
   Click="PrintButton_Click" />

不要为此感到难过。我上次通过循环中错误的Print打印了。

答案 3 :(得分:0)

我遇到了同样的问题,发现原因是以下这一行:

cnvsMain.Children.Remove(PrintPagePlaceHolder);

cnvMain位于用户按下“打印”按钮的页面上(我试图将其从该页面中删除,以便将其添加到我要打印的画布上)。

我的提示:尝试逐行评论行,直到找到导致问题的行为止。而不是尝试解决它。