1

当你在 windows phone 中设计一个相对较大的应用程序时,通过 Uris 导航有点痛苦,所以我写了一个这样的简单方法:

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

问题是,我想将此代码包含在所有将进行导航的 PhoneApplicationPages 中,但是我想知道复制和粘贴是否是唯一的选择,我通常会尝试使我的页面派生自具有方法和派生自基类,但这将是另一个痛苦,因为它们PhoneApplicationPages是部分类。有没有其他更好的方法来实现这一点,还是我应该复制和粘贴?

谢谢。

4

3 回答 3

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"

于 2012-04-25T07:21:12.900 回答
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");
于 2012-04-25T07:32:30.393 回答
2

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

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

即,在应用程序构造函数中注册视图:

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

从代码中,您可以使用导航到页面

    ViewNavigator.Instance.NavigateTo<IMainView>();

整个工具包比这里描述的更先进(支持参数;包括允许您通过 XAML 进行相同操作的行为),但我希望您能大致了解。

于 2012-04-25T07:37:56.290 回答