windows phone页面间数据共享

 可以通过静态属性Application.Current可以返回当前程序的Application对象,然后可以简
单地将其转换成App类型。这意味着可以使用App类来存储用于程序中多个页面共享的数据。
下面例子演示如何利用App类实现页面间数据共享:
在Silverlight项目的App类定义一个简单的公共属性:
public partial class App : Application
{
//用于在页面间共享数据的公共属性
public Color? SharedColor { set; get; }//这个属性定义为可空的(nullable)Color
对象,而不仅仅是一般的Color对象
...
}
源页面MainPage如下所示:
MainPage.xaml中包含TextBlock:
<TextBlock HorizontalAlignment="Center" Name="txt1" Text="navigate to 2nd page" VerticalAlignment="Center" ManipulationStarted="txt1_ManipulationStarted" />
MainPage.xaml.cs代码如下:
namespace PhoneApp2
{
public partial class MainPage : PhoneApplicationPage
{
Random rand = new Random();
// 构造函数
public MainPage()
{
InitializeComponent();
}
private void txt1_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
String destination = "/Page1.xaml";
if (this.ContentPanel.Background is SolidColorBrush)
{
(Application.Current as App).SharedColor = (this.ContentPanel.Background as SolidColorBrush).Color;//在导航到Page1页面之前首先将Color对象保存到App类的属性中
}
this.NavigationService.Navigate(new Uri(destination, UriKind.Relative));//导航至指定页面
e.Complete();
e.Handled = true;
}
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
//当触摸到页面里textblock以外的部分时,contentpanel的背景会变成随机颜色。
this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)));//设置背景颜色
base.OnManipulationStarted(e);
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//该函数被调用时,页面的构造函数已经执行完毕,但还没有执行其他的方法
{
Color? sharedColor = (Application.Current as App).SharedColor;//访问公共属性
if (sharedColor != null)
{
this.ContentPanel.Background = new SolidColorBrush(sharedColor.Value);
}
base.OnNavigatedTo(e);
}
}
}
目标页面Page1如下所示:
Page1.xaml中包含TextBlock:
<TextBlock HorizontalAlignment="Left" Margin="157,212,0,0" Name="txt2" Text="go back to 1st page" VerticalAlignment="Top" ManipulationStarted="txt2_ManipulationStarted" />Page1.xaml.cs代码如下所示:
namespace PhoneApp2
{
public partial class Page1 : PhoneApplicationPage
{
Random rand = new Random();
public Page1()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)//该函数被调用时,页面的构造函数已经执行完毕,但还没有执行其他的方法
{
Color? shareColor = (Application.Current as App).SharedColor;//访问公共属性
if (shareColor != null)
{
this.ContentPanel.Background = new SolidColorBrush(shareColor.Value);
}
base.OnNavigatedTo(e);
}
private void txt2_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
if (this.ContentPanel.Background is SolidColorBrush)
{
(Application.Current as App).SharedColor = (this.ContentPanel.Background as SolidColorBrush).Color;//在返回到MainPage页面之前将当前Color对象保存到App类的属性中
}
this.NavigationService.GoBack();
e.Complete();
e.Handled = true;
}
protected override void OnManipulationStarted(ManipulationStartedEventArgs e)
{
//当触摸到页面里textblock以外的部分时,contentpanel的背景会变成随机颜色。
this.ContentPanel.Background = new SolidColorBrush(Color.FromArgb(255, (byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)));//设置背景颜色
base.OnManipulationStarted(e);
}
}
}
运行程序你就会发现在页面之间进行导航时,页面总是共享相同的颜色。
其实你在App类所定义的属性在这里相当于一个全局变量,整个应用程序皆可访问。

你可以通过静态属性PhoneApplicationService.Current来获取现有PhoneApplicationService的实例,如下所示:
PhoneApplicationService appService = PhoneApplicationService.Current;
PhoneApplicationService类定义在命名空间Microsoft.Phone.Shell中,它的实例在标准的App.xaml文件中创建:
<Application.ApplicationLifetimeObjects>
<!--处理应用程序的生存期事件所需的对象-->
<shell:PhoneApplicationService
Launching="Application_Launching" Closing="Application_Closing"
Activated="Application_Activated" Deactivated="Application_Deactivated"/>
</Application.ApplicationLifetimeObjects>
PhoneApplicationService包含一个State属性(类型为IDictionary<String,object>)可用于保存和恢复数据。但该State字典只适用于存储程序同一次运行过程中的临时数据。如果需要在程序多次执行过程之间保存数据,建议使用独立存储。访问State属性内容类似下面所示:
Color clr = (Color)appService.State["Color"];
appService.State["Color"] = clr;

时间: 2024-09-20 01:10:11

windows phone页面间数据共享的相关文章

windows phone页面间传递数据

 页面间传递数据包括两个问题1.如何从源页面传递数据到目标页面?下面例子提供解决上面问题的方案.源页面MainPage.xaml内容区域包含一个TextBlock,如<TextBlock HorizontalAlignment="Center" Name="txt1" Text="navigate to 2nd page" VerticalAlignment="Center" ManipulationStarted=&q

一起学Windows phone 7开发(二.页面间跳转与传值)

Windows Phone7允许创建多个页面,但并不像Windows mobile程序一样,可能关闭窗口或最小化,而是通过跳转的方式来实现的.但是其跳转方式也不同于PC上Sliverlight的跳转方式.不过其传值方式却是一样的. 一.跳转: 可以通过这条语句来完成:this.NavigationService.Naviagte(new Uri("/testPage.xaml", UriKind.Relative)); 向前跳转:this.NavigationService.GoFro

Windows Phone 8初学者开发—第18部分:在页面间导航

原文 Windows Phone 8初学者开发-第18部分:在页面间导航 原文地址:  http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Part-18-Navigating-Between-Pages 系列地址: http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners 源

Windows下进程间通信及数据共享

进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码.数据以及它可利用的系统资源(如文件.管道等)组成. 多进程/多线程是Windows操作系统的一个基本特征.Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(InterProcess Communication, IPC),进程通信就是指不同进程间进行数据共享和数据交换.  

浅谈ASP中Web页面间的数据传递

web|数据|页面 基于Web的动态网页设计必会涉及到页面间的数据传递,文章探讨了ASP设计中常用的Web页面间的数据传递方式,分析各种数据传递方式的使用方法.使用场合及优缺点,其都是设计阶段选择数据传递方式考虑的关键.往往使用动态网页技术制作ASP应用程序时一般至少拥有二个或二个以上的Web页面,这时就得考虑在多个Web页面间传递数据的处理工作.而ASP应用程序的各个页面类似于Windows应用程序的form窗体,Windows应用程序各form间数据传递可以通过定义全局变量等方法来实现.网页

ASP.NET页面间数据传递小结

asp.net|数据|页面 ASP.NET较ASP最大的优点,也是其受到越来越多程序员的欢迎的主要原因就是,ASP.NET为开发者提供了事件驱动的开发模式,从此程序员可以像利用可视化编程工具开发Windows应用程序一样来开发ASP.NET的基于Web页面的应用程序了. 一般稍微庞大的ASP.NET程序至少拥有二个或以上的Web页面,程序员在开发类似ASP.NET应用程序时一般都需要处理在多个Web页面传递数据的问题.我们知道ASP.NET程序中的各个Web页面类似于Windows应用程序中的F

Windows 2000页面文件的优化

现在主流计算机的内存配置已经提升到128MB,不过对于庞大的Windows操作系统以及功能越来越强大.占用系统内存资源也越来越多的各种软件来说,128MB还是远远不能满足要求的,这时候Windows使用的页面文件(功能相当于我们常说的虚拟内存)就可以发挥其作用了.它将一部分硬盘空间设置为虚拟内存,从而扩大了计算机的可用"内存"空间来满足程序的运行要求.尽管由于硬盘的读取.传输速率等远远低于内存的速率,容易导致系统工作效率的降低和系统反应的延迟,但相对于花巨资购买硬件提高系统性能来说,这

windows phone 页面传值(7)

原文:windows phone 页面传值(7) 在windows phone 中微软为我们提供了页面间传递参数的解决方案,下面就为大家介绍使用方法,页面传值的案例中我们建立两个页面,一个是MainPage另一个是SecondPage页面:MianPage页面的主要代码为:      <Grid x:Name="ContentPanel" Grid.Row="1" Background="Goldenrod" Margin="12

asp.net不同页面间数据传递的多种方法_实用技巧

1. Get(即使用QueryString显式传递)方式:在url后面跟参数.特点:简单.方便.缺点:字符串长度最长为255个字符:数据泄漏在url中.适用数据:简单.少量.关键的数据.适用范围:传递给自己.传递给另一个目标页面:常用于2个页面间传递数据.用法:例如:url后加?UserID=-,跳转到目标页面,目标页面在伺服端可用Request.QueryString["InputText"]获取其指定参数值. 2. Post方式:通用的方式.利用form提交.特点:最常用的方法.常