Windows Phone 7 / Silverlight: как сделать навигацию? - PullRequest
4 голосов
/ 31 октября 2010

Я занимаюсь разработкой приложения Silverlight wp7. Я не совсем уверен, как сделать навигацию.

У меня есть несколько PhoneApplicationPage классов, которые содержат несколько UserControl с. Похоже, я могу использовать NavigationService для навигации из классов PhoneApplicationPage, но не из классов UserControl. Это предпочтительнее? Является ли общая схема не для прямой навигации с UserControl, а для обработки с PhoneApplicationPage?

В настоящее время у меня есть коллекция контента, разделенная на разделы. Каждый раздел имеет свой собственный PivotItem в PivotControl. Содержание для каждого раздела в ListBox. Я обернул ListBox в UserControl, чтобы обеспечить немного больше функциональности / управление контентом. Однако похоже, что я не могу перейти непосредственно из этого класса.

Я мог бы удалить оболочку и просто поместить функциональность в сводную страницу напрямую. Но что, если я хочу повторить список содержимого в другом месте моего приложения?

В качестве альтернативы, я передаю NavigationService в UserControl, когда он создается PhoneApplicationPage.

Ответы [ 4 ]

2 голосов
/ 06 марта 2011

В WP7 RootVisual всегда представляет собой PhoneApplicationFrame, и поскольку NavigationService и Frame (или PhoneApplicationFrame) совместно используют почти все их методы / свойства (намеренно), вы можете сделать это:

(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(...whatever...);
2 голосов
/ 31 октября 2010

В WPF это было бы просто: вы вызываете статический метод для NavigationService, чтобы получить ответ: NavigationService.GetNavigationService(this).

К сожалению, это не доступно в WP7.

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

var service = ((Application.Current as App).RootFrame.Content as Page).NavigationService;
0 голосов
/ 10 марта 2011

Я сделал пример навигации с использованием MVVM Light на http://www.geoffhudik.com/tech/2010/10/10/another-wp7-navigation-approach-with-mvvm.html. Он мог бы использовать некоторый рефакторинг, а некоторые предпочитают помещать некоторые вспомогательные функции навигации в другой класс, отличный от базовой страницы. Это достаточно легко сделать, и это может дать некоторые идеи.

0 голосов
/ 06 марта 2011

Я сделал пользовательский UserControl для этого:

public class UserControlWithNavigation :UserControl
{
    public event EventHandler NavigateToPageEvent;

    public void NavigateToPage(Uri uri)
    {             
        var e = new NavigationEventArgs(null, uri);
        if (NavigateToPageEvent != null)
            NavigateToPageEvent(this, e);
    }
}

Использование XAML пользовательского класса UserControl:

<common:UserControlWithNavigation    
  xmlns:common="clr-namespace:NameSpace;assembly=AssemblyName"

и на моей странице

 MyUserControl.NavigateToPageEvent += (s, e) =>
 {
      NavigationService.Navigate(((NavigationEventArgs)e).Uri);
 };

Как видите, вы должны дать своему UserControl имя (MyUserControl в приведенном выше примере)

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