代码之家  ›  专栏  ›  技术社区  ›  Andrew Russell

不带XAML的Silverlight会使源URI失败?

  •  1
  • Andrew Russell  · 技术社区  · 14 年前

    我正在从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文件设置为“build action:none,copy if new”(即:它在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>
    

    还有C-这里一点也不奇怪。

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

    到目前为止一切都是有效的。所以我的问题是: 为什么我换衣服的时候

    Grid grid = new MainPage();
    

    Grid grid = new Grid();
    

    这个 mediaElement.MediaFailed 调用事件(出现ag-e-u网络错误)?

    唯一有趣的是 InitializeComponent 正在做的就是打电话 Application.LoadComponent (这是默认生成的代码)。那么,这个函数可能正在做什么来允许源URI工作呢?

    看来 Application.GetResourceStream 还是可以的。但我需要能够从Xap外部获得一些资源。

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   AnthonyWJones    14 年前

    关键因素是 尿样。相对 . 问题是它与什么相关?

    影响之一 LoadComponent 是移动了“/”的位置。以前 负载分量 执行路径“/”引用的位置与在主机浏览器中执行的位置相同。后 负载分量 “/”是指xap的根内容和包含xap的文件夹的混合。

    由于您是通过独立的测试HTML页面运行此操作,在第二个示例中,“/”指的是物理驱动器的根目录,例如“C:\”。

    如果您将URL更改为“content/some music.mp3”(即删除“/”前缀),并假定您的测试HTML页与xap是相同的文件夹,那么它应该按预期工作。

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