相当于包含在 wp7 sl 中

本文关键字:sl wp7 包含 相当于 | 更新日期: 2023-09-27 18:32:14

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

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

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

谢谢。

相当于包含在 wp7 sl 中

我没有看到任何问题。

创建您的基本电话页面:

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"

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

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");

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

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

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

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

从代码中,您可以使用

    ViewNavigator.Instance.NavigateTo<IMainView>();

整个工具包比此处描述的更高级(支持参数;包括允许您通过 XAML 实现相同操作的行为),但我希望您了解大致概念。