Windows手机,实例化页面并显示它

时间:2013-07-04 13:26:09

标签: c# windows-phone-8

是否可以从另一个项目中实例化PhoneApplicationPage(在同一个解决方案中,但这不应该是重要的,是吗?)并显示它?

嗯,我知道可以用:

实例化另一个页面
MyPageInProjectB bPage= new MyPageInProjectB ();

但是如何展示呢?

我想做以下事情: 我有两个项目,我想在另一个项目中显示一个项目的页面,并在它们之间传递数据。所以我认为这将是完美的:

public partial class MyPageInProjectA : PhoneApplicationPage
{
    private MyPageInProjectB bPage;

    public MyPageInProjectA()
    {
        InitializeComponent();

        MyComplexObject objectIWantToPassToOtherPage = new MyComplexObject ();

        bPage= new MyPageInProjectB (objectIWantToPassToOtherPage);
    }

    private void ShowBPageButton_Click(object sender, EventArgs e)
    {
        // this is now what I want to do, but what doesn't work
        bPage.Show();
    }
}

或者是否有另一种方法可以在这些页面之间传递复杂数据?

我不想使用查询字符串,因为有时发生(De-)Serializer与MyComplexObject有问题。

我读了如何在这个帖子中的两个页面之间导航:How to redirect to a page which exists in specif project to another page in other project in the same solution? 但我想将一个复杂的对象从一个页面传递到另一个页面。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

修改: 好的,现在仔细阅读你的问题后,我可以给你一个更好的答案。

首先,您无法将数据传递给页面构造函数,因为运行时本身在导航时处理实例创建,您只能使用NavigationService进行导航。但是,您还有其他选择。

其中一个是使用查询字符串,但如果你不想使用它,你可以使用PhoneApplicationService来存储你的复杂对象并从中读取另一个页面。

// In source page
MyComplexObject objectIWantToPassToOtherPage = new MyComplexObject ();
PhoneApplicationService.Current.State["MyComplexObject"] = objectIWantToPassToOtherPage;
NavigationService.Navigate(new Uri("/ProjectB;component/MyPageInProjectB.xaml", UriKind.Relative));

// In destination page's constructor
public MyPageInProjectB() {
  var myComplexObject = (MyComplexObject) PhoneApplicationService.Current.State["MyComplexObject"];
  // ...
}

除此之外是使用全局变量。这些是我能想到的唯一选择。


要导航到类库ProjectB中的页面,您需要使用类似于以下内容的uri:

/{assemblyName};component/{path}

在您的情况下,您可以执行以下操作:

NavigationService.Navigate(new Uri("/ProjectB;component/MyPageInProjectB.xaml", UriKind.Relative));

请注意,我在此处指定了相对路径,因此MyPageInProjectB.xaml需要位于ProjectB内的根文件夹中才能使上述示例正常工作。