日期:2014-05-17 浏览次数:20951 次
老周的博客http://blog.csdn.net/tcjiaan,转载请注明原作者和出处。
首先请各位看下面的图。
相信微博的这个功能,大家不陌生吧。那么它是怎么实现的呢?
首先,我们要了解一个东西,应用程序协定,名称不好理解,也很难翻译,这样吧,我们看看它是在哪里设置的,也许你会有点感悟。
用VS2012新建windows store应用后,你会看到项目中有个清单文件,用于配置与应用程序包相关的信息。
双击打开它。
切换到“声明”选项卡。
这就是应用程序协定,你可以理解为为你的应用程序声明多种启动方式,并作为特定的目标使用,如上面图片中,新浪微博为什么可以在其它应用程序中启动,并且可以共享信息,这样,我们可以理解为应用程序之间数据的传递,而我们最常见的一种方式就是复制-粘贴,这是利用剪贴板作为载体实现应用程序之间 的数居共享。
如果还是觉得很抽象,那最好的办法就是用实例来说明,我们来模拟刚才新浪微博的功能,一个解决方案我们需要建两个项目,一个是共享源,即发送共享数据的一方;另一个是共享目标,即接受共享数据的一方。
首先我们来实现共享源,即发送方。
1、启动VS,新建项目。
2、在MainPage.xaml中输入以下XAML代码。
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <StackPanel> <TextBox Name="txtContent" Height="285"/> <Button Margin="12,15,0,0" Content="共享" Click="onShare"/> </StackPanel> </Grid>
3、然后,我们要处理按钮的Click事件。
private void onShare(object sender, RoutedEventArgs e) { DataTransferManager.ShowShareUI(); }
ShowShareUI方法是静态的,可以直接调用,DataTransferManager位于命名空间Windows.ApplicationModel.DataTransfer,发送共享数据正是通过它来完成。
那,什么时候设置我们要发送的数据呢?例如,现在我要共享目标共享一条文本信息,设置数据是在DataTransferManager类的DataRequested事件中处理的。
通过GetForCurrentView方法获得DataTransferManager的实例,故在MainPage类的构造函数加入以下代码。
public MainPage() { this.InitializeComponent(); DataTransferManager.GetForCurrentView().DataRequested += MainPage_DataRequested; }
4、处理DataRequested事件。
void MainPage_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) { var defl = args.Request.GetDeferral(); // 设置数据包 DataPackage dp = new DataPackage(); dp.Properties.Title = "共享文本"; dp.Properties.Description = "分享一些字符串。"; dp.SetText(txtContent.Text); args.Request.Data = dp; // 报告操作完成 defl.Complete(); }
OK,现在我要完成共享目标。
在解决方案资源管理器”解决方案节点上右击,在弹出菜单中依次选择“添加”->“新建项目”,再建一个App,它就是数据的接收方。
1、打开清单文件,切换到“声明”选项卡,在下拉列表中选择“共享目标”,并单击“添加”按钮。
在右面的面板中,找到“数据格式”节,单击“新增”按钮。
因为只需传递文本信息,因此,输入 Text 即可。
保存,关闭清单文件。
2、新建一个空白页,命名为SharedPage.xaml,XAML代码如下。
<Grid Background="#FF0B4C81"> <TextBlock Margin="10,15,0,0" FontSize="28" VerticalAlignment="Top" HorizontalAlignment="Left" x:Name="tbShareText"/> </Grid>
3、打开SharedPage.xaml.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Window