Подтвердить что ты не робот

Перейдите на страницу XAML в другой сборке в Windows Phone 7

У меня есть страница XAML в отдельной библиотеке классов Windows Phone. Библиотека включена в мое решение VS и ссылается на мой проект приложения. Скажем, страница называется TestPage.xaml, и она находится в корневой папке моей библиотеки под названием SharedPages.

Я хотел бы перейти к этой странице в своем приложении с помощью NavigationService. Я нашел этот пост, который предлагает использовать этот формат URI:

/{assemblyName};component/{pathToResource}

Итак, я пробую что-то вроде этого:

NavigationService.Navigate(new Uri("/SharedPages;component/TestPage.xaml"));

Когда я запускаю это, я получаю следующее исключение:

Навигация поддерживается только для относительных URI, которые являются фрагментами, или начинаются с '/' или которые содержат '; component/'.

Что я делаю неправильно?

Спасибо.

4b9b3361

Ответ 1

Похоже, что URI должен быть создан как относительный URI. Это работает:

NavigationService.Navigate(new Uri("/SharedPages;component/TestPage.xaml", UriKind.Relative));

Ответ 2

Эй, я не думаю, что это ваше дело, но хорошо просмотреть сгенерированное имя сборки.

Вариант 1) Неправильное имя сборки

Следующий формат:

/{assemblyName};component/{pathToResource}

Имя сборки можно проверить в свойствах вкладки проекта. Я помню парня, который переименовал проект, но не сборку, и это было причиной из-за сбоя навигации.

Вариант 2)

Разделитель точек в имени сборки.

Я не знаю истинной причины этого, но я взял время, чтобы найти его. Название сборки не должно содержать точки в качестве разделителя. Я предполагаю, что Uri parse будет неправильно Uri. Например, у меня была сборка под названием "Com.Hmb.Prax", и я получил следующее исключение:

Navigation is only supported to relative URIs that are fragments, or begin with '/', or which contain ';component/'.
Parameter name: uri

Как только я переименую свою dll в "ComHmbPrax", он работал хорошо. Herber