c# - windows phone,实例化一个页面并展示

标签 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();
    }
}

或者有其他方法可以在这些页面之间传递复杂数据吗?

我不想使用查询字符串,因为有时会发生(反)序列化程序在 MyComplexObject 方面出现问题。

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

最佳答案

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

首先,您不能将数据传递给页面构造函数,因为运行时本身会在导航时处理实例创建,您只能使用 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 内的根文件夹中才能使上述示例正常工作。

关于c# - windows phone,实例化一个页面并展示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471517/

相关文章:

c# - 适用于旧系统的 CQRS

c# - 在 Chrome 浏览器中运行测试时,编码的 Ui 播放无法找到给定的搜索控件

c# - 无法在简单计算器应用程序的按钮单击事件上更新屏幕(文本框)

c# - 在 Windows Phone 8 上启动 PDF 阅读器

C#:测试一个对象是否实现了接口(interface)列表中的任何一个?

c# - EntityFramework 事务 - 保存到多个表

c# - 从列表中获取优先项目并将它们插入到给定位置的同一列表中 c#

c# - 裁剪本地存储的图像

xaml - LongListMultiSelector 中的项目之间的空间

windows-phone-8 - 如何删除 Windows Phone 模拟器中显示的额外图像?