Silverlight的HtmlPage.Window.Navigate和HyperlinkBut​​ton之间的区别?

我正在尝试让我的Silverlight 4.0应用程序在用户点击某些内容将其带到其网址时启动相关程序文件文件扩展名,但我是否有使用 HtmlPage.Window.Navigate或HyperlinkBut​​ton的不同体验.

我的网址是我资源的RESTful网址,例如“HTTP://…/objects/object-1/package”.该URL实际上是一个ASP.NET MVC 2控制器,它使用自定义扩展返回zip内容.也就是说,HTTP响应头看起来像:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed,13 Apr 2011 17:22:19 GMT
X-AspNet-Version: 4.0.30319
Content-disposition: attachment; filename=object-1.pkg
transfer-encoding: chunked
Cache-Control: private
Content-Type: application/zip
Connection: Close

当我使用超链接按钮时,Internet Explorer会提示我打开,保存或取消.当我选择Open时,它会打开我与* .pkg相关联的应用程序:

<HyperlinkButton TargetName="_blank" NavigateUri="http://localhost:8023/objects/object-1/package">Launch!</HyperlinkButton>

但是,如果我改为使用最终使用HtmlPage.Window.Navigate的命令,IE只会打开一个窗口然后快速关闭

string url = string.Format("{0}/objects/object-{1}/package",_webBaseUrl,objectId.Value);
Uri uri = new Uri(url);
HtmlPage.Window.Navigate(uri,"_blank");

我已经使用fiddler2进行了验证,在这两种情况下,HTTP请求和HTTP响应看起来都相同.这似乎是Internet Explorer或Silverlight的细微差别,我不确定我能克服,但我希望Stackoverflow社区可以确认或否认这个问题.

解决方法

有一篇简短的文章 here对这个问题有所了解 – 我发现HtmlPage.Window.Navigate在IE之外根本不起作用.

但回到最初的问题,使用dotpeek我可以看到以下差异:

跟踪HyperlinkBut​​ton OnClick,它将调用委托给agcore:(XcpImports.cs)

[DllImport("agcore",EntryPoint = "NavigatetoSafeURI",CharSet = CharSet.Unicode,CallingConvention = CallingConvention.Cdecl)]
private static uint NavigatetoSafeURINative(IntPtr context,[MarshalAs(UnmanagedType.LPWStr)] string location,[MarshalAs(UnmanagedType.LPWStr)] string target,bool checkUserInitiatedAction);

和HtmlPage.Window.Navigate(uri)进行此调用

[DllImport("agcore")]
public static int DOM_Invoke(IntPtr pbrowserService,IntPtr pObject,[MarshalAs(UnmanagedType.LPWStr)] string pszMethodName,int nArgCount,[MarshalAs(UnmanagedType.LPArray)] NativeMethods.ScriptParam[] ppParams,ref NativeMethods.ScriptParam pResult,ref NativeMethods.ExceptionInfo pExcepInfo);

相关文章

如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的...
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,...
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如...
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不...
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:...
我需要根据Silverlight中的某些配置值设置给定控件的Style.我...