Windows Phone 7/Silverlight: 如何进行页面导航?

4
我正在开发一款Silverlight wp7应用程序,但我不确定如何进行导航。
我有几个PhoneApplicationPage类,其中包含多个UserControl。看起来我可以使用NavigationService从PhoneApplicationPage类导航,但不能从UserControl类导航。这是首选的吗?通常的模式不是直接从UserControl导航,而是从PhoneApplicationPage处理它吗?
目前,我有一个分成几个部分的内容集合。每个部分都有自己的PivotItem在PivotControl中。每个部分的内容都在ListBox中。我将ListBox包装在UserControl中以提供更多功能/管理内容。但是,似乎我无法直接从此类导航。
我可以删除包装器并直接将功能放入Pivot页面中。但是,如果我想在应用程序的其他位置重复内容列表怎么办?
或者,当PhoneApplicationPage构造UserControl时,我将NavigationService传递给UserControl。
4个回答

2
在WPF中,这很简单:您可以调用NavigationService上的静态方法来获取答案:NavigationService.GetNavigationService(this)
不幸的是,在WP7中似乎没有这个功能。
相反,我想出了这个hack...它丑陋无比...希望有更好的方法。可能,至少,您可以想出一些更漂亮的东西。至少进行一些空值检查...
var service = ((Application.Current as App).RootFrame.Content as Page).NavigationService;

2
在WP7中,RootVisual始终是一个PhoneApplicationFrame。由于NavigationService和Frame(或PhoneApplicationFrame)几乎共享所有方法/属性(故意的),您可以这样做:
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(...whatever...);

0
我为此制作了一个自定义的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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接