在wp7 sl中包含的等价物?

时间:2012-04-25 07:09:22

标签: c# windows-phone-7 navigation

当您在Windows手机中设计一个相对较大的应用程序时,通过Uris导航会有点痛苦,所以我写了一个简单的方法:

void Navigate(string Frame)
{
       NavigationService.Navigate(new Uri(string.Format("/{0}.xaml", 0), UriKind.Relative));
}

问题是,我想在所有将要进行导航的PhoneApplicationPages中包含此代码,但后来我想知道复制和粘贴是否是唯一的选项,我通常会尝试让我的页面派生自一个类它具有基类中的方法和衍生物,但由于PhoneApplicationPages是部分类,因此会产生另一种痛苦。可以有任何其他更好的方法来实现这一点,还是我应该复制和粘贴?

感谢。

3 个答案:

答案 0 :(得分:3)

我没有看到任何问题。

创建基础PhonePage:

public class PhoneApplicationPageBase : PhoneApplicationPage
    {
        public void Navigate()
        {

        }
        // Others methods
    }
您的网页中的

源于此:

public partial class Page1 : PhoneApplicationPageBase
    {
        public Page1()
        {
            InitializeComponent();
        }
    }

也在xaml中:

<my:PhoneApplicationPageBase
    x:Class="Views.Page1"
    ...>

</my:PhoneApplicationPageBase>

或更多。您可以创建扩展方法。

 public static class Ext
    {
        public static void Navigate(this Page page, string view)
        {

        }
    }

然后使用this.Navigate("Page2.xaml"

答案 1 :(得分:2)

您可以将方法拉出到静态类中,然后将调用页面作为参考传递;

public static class Navigator
{
    public static void Navigate(Page page, string frame)
    {
        page.NavigationService.Navigate(new Uri(string.Format("/{0}.xaml", frame), UriKind.Relative));
    }
}

然后你只需这样打电话:

Navigator.Navigate(this, "NewPage");

答案 2 :(得分:2)

我同意Roman的观点,从基页派生的过程在最坏的情况下是单调乏味的:一些字符串替换,你就完成了。

我有自己的小mvvm工具包,其中包含一个导航器服务(基本上)将uri映射到页面类。在应用程序启动时,您将页面类映射到uri,然后您可以通过指定类来导航到视图(uri)。

即,在app构造函数中注册视图:

    ViewNavigator.RegisterView<IMainView>(new Uri("/Pages/MainView.xaml", UriKind.RelativeOrAbsolute));

从代码中,您可以使用

导航到某个页面
    ViewNavigator.Instance.NavigateTo<IMainView>();

整个工具包比这里描述的更先进(支持参数;包括允许你通过XAML进行相同的行为),但我希望你能得到一般的想法。