【问题标题】:Silverlight without XAML makes source URIs fail?没有 XAML 的 Silverlight 会导致源 URI 失败?
【发布时间】:2010-09-23 20:51:40
【问题描述】:

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

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

private void Application_Startup(object sender, StartupEventArgs e)
{
    Grid grid = new MainPage();
    this.RootVisual = grid;

    var mediaElement = new MediaElement();
    mediaElement.MediaFailed += (s, ea) => { mediaFailed = true; };
    mediaElement.Source = new Uri(@"/Content/Some Music.mp3", UriKind.Relative);
    grid.Children.Add(mediaElement);
}

MP3 文件设置为“构建操作:无,如果更新则复制”(即:它位于 XAP 旁边)。这是 MainPage 的 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>

还有 C#——这里没有什么不寻常的地方。

public partial class MainPage : Grid
{
    public MainPage()
    {
        InitializeComponent();
    }
}

到目前为止一切正常。所以我的问题是这样的:为什么当我改变时

Grid grid = new MainPage();

Grid grid = new Grid();

mediaElement.MediaFailed 事件被调用(带有 AG_E_NETWORK_ERROR)?

InitializeComponent 唯一有趣的事情是调用Application.LoadComponent(这是默认生成的代码)。那么该函数可能在做什么以允许源 URI 工作?

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

(注意:this guy 似乎遇到了同样的问题 - 但没有人回答他的问题。)

【问题讨论】:

  • 我无法重现此问题,相对于包含 Xap 的“ClientBin”文件夹的“Content”文件夹在哪里?是孩子还是兄弟姐妹?
  • @Anthony:我没有 ClientBin 文件夹——它是一个从文件系统运行的独立项目。 Content 文件夹是 XAP 的同级文件夹。

标签: silverlight xaml


【解决方案1】:

关键因素是UriKind.Relative。问题是它是相对的?

LoadComponent 的作用之一是它移动了“/”的位置。在LoadComponent 执行之前,路径“/”指的是与主机浏览器中相同的位置。 LoadComponent 之后的“/”指的是 Xap 的根目录和包含 Xap 的文件夹的混合体。

由于您是通过独立的测试 html 页面运行它,因此第二个示例中的“/”指的是物理驱动器的根目录,例如"c:\"。

如果您将 Url 更改为“Content/Some Music.mp3”(即删除“/”前缀)并假设您的测试 html 页面与 Xap 相同的文件夹,它应该可以按预期工作。

请注意,您无法使用父路径“..”转义混合路径,Silverlight 不允许您这样做。

【讨论】:

  • 感谢您的解释。供大家参考,这里是msdn.microsoft.com/library/cc296240(VS.95).aspx 文档,你的回答也引导我(我以后必须自己重新阅读它,它很迟钝,我还没有完全理解它)。我认为在我的情况下,我只需要一些 XAML - 因为我部署的 XAP(和相关内容)将在未指定的 URL 处从 HTML 引用。
猜你喜欢
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多