Silverlight без XAML приводит к сбою исходных URI? - PullRequest
1 голос
/ 23 сентября 2010

Я нахожусь в процессе удаления XAML из моего проекта Silverlight и заставляю его использовать только код (согласно этой статье ).

Вот мое очень простое событие запуска дляприложение 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 newer» (т.е. оно находится рядом с XAP),Вот XAML для MainPage:

<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.

(Примечание: кажется, у этого парня такая же проблема, но никто не ответил на его вопрос.)

1 Ответ

1 голос
/ 23 сентября 2010

Ключевым фактором является UriKind.Relative .Вопрос в том, к чему это относится?

Один из эффектов LoadComponent заключается в том, что он смещает местоположение "/".Перед выполнением LoadComponent путь "/" относится к тому же местоположению, что и в браузере хоста.После LoadComponent "/" обозначает гибрид корневого содержимого Xap и папки, содержащей Xap.

Поскольку вы запускаете его через отдельную тестовую HTML-страницу "/" во втором примереотносится к корню физического диска, например, «c: \».

Если вы измените URL-адрес на «Content / Some Music.mp3» (то есть удалите префикс «/») и предполагаете, что ваш тестhtml-страница - это та же папка, что и Xap, она должна работать должным образом.

Обратите внимание, что вы не можете избежать гибридного пути с родительским путем "..", Silverlight не позволяет вам сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...