没有XAML的Silverlight会导致源URI失败吗?

没有XAML的Silverlight会导致源URI失败吗?,silverlight,xaml,Silverlight,Xaml,我正在从Silverlight项目中删除XAML并使其仅使用代码(根据) 下面是我的Silverlight应用程序的非常简单的启动事件(使用模板项目中的标准App.xaml): 其中MP3文件设置为“构建操作:无,如果更新则复制”(即:它位于XAP旁边)。以下是主页的XAML: <Grid x:Class="TestGame.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

我正在从Silverlight项目中删除XAML并使其仅使用代码(根据)

下面是我的Silverlight应用程序的非常简单的启动事件(使用模板项目中的标准App.xaml):

其中MP3文件设置为“构建操作:无,如果更新则复制”(即:它位于XAP旁边)。以下是主页的XAML:

<Grid x:Class="TestGame.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Grid>
到目前为止一切正常。所以我的问题是:为什么当我改变时

Grid grid = new MainPage();

调用了
mediaElement.MediaFailed
事件(出现AGU E_网络错误)

InitializeComponent
所做的唯一有趣的事情就是调用
Application.LoadComponent
(它是默认生成的代码)。那么,该函数会做什么来允许源URI工作呢

似乎
Application.GetResourceStream
仍然可以正常工作。但是我需要能够从XAP外部获得一些资源


(注意:它似乎也有同样的问题,但没有人回答他的问题。)

关键因素是UriKind.Relative。问题是它与什么有关

LoadComponent
的一个影响是它会移动“/”的位置。在
LoadComponent
执行路径之前,“/”指的是与主机浏览器中相同的位置。在
LoadComponent
之后“/”表示Xap的根内容和包含Xap的文件夹的混合

因为您是通过一个独立的测试html页面来运行它,所以在第二个示例中“/”指的是物理驱动器的根,例如“c:\”

如果您将Url更改为“Content/Some Music.mp3”(即删除“/”前缀),并且假设您的测试html页面与Xap是同一文件夹,那么它应该可以正常工作


请注意,您不能使用父路径“.”逃避混合路径,Silverlight不允许您这样做。

关键因素是UriKind.Relative。问题是它与什么有关

LoadComponent
的一个影响是它会移动“/”的位置。在
LoadComponent
执行路径之前,“/”指的是与主机浏览器中相同的位置。在
LoadComponent
之后“/”表示Xap的根内容和包含Xap的文件夹的混合

因为您是通过一个独立的测试html页面来运行它,所以在第二个示例中“/”指的是物理驱动器的根,例如“c:\”

如果您将Url更改为“Content/Some Music.mp3”(即删除“/”前缀),并且假设您的测试html页面与Xap是同一文件夹,那么它应该可以正常工作


请注意,您不能使用父路径“.”来逃避混合路径,Silverlight不允许您这样做。

我无法重现此问题,相对于包含Xap的“ClientBin”文件夹,“Content”文件夹在哪里?是孩子还是兄弟姐妹?@Anthony:我没有ClientBin文件夹-它是从文件系统运行的独立项目。内容文件夹是XAP的同级。我无法重现此问题,相对于包含XAP的“ClientBin”文件夹,“Content”文件夹在哪里?是孩子还是兄弟姐妹?@Anthony:我没有ClientBin文件夹-它是从文件系统运行的独立项目。内容文件夹是XAP的同级。感谢您的解释。供大家参考,这是你的回答也会引导我的文档(我以后不得不自己重新阅读,它相当迟钝,我还没有完全理解)。我想在我的例子中,我只需要一些XAML——因为我部署的XAP(和相关内容)将在一个未指定的URL处从HTML引用。谢谢您的解释。供大家参考,这是你的回答也会引导我的文档(我以后不得不自己重新阅读,它相当迟钝,我还没有完全理解)。我想在我的例子中,我只需要一些XAML——因为我部署的XAP(以及相关内容)将从HTML中的一个未指定URL引用。
public partial class MainPage : Grid
{
    public MainPage()
    {
        InitializeComponent();
    }
}
Grid grid = new MainPage();
Grid grid = new Grid();