📜  Windows 10开发-共享合同

📅  最后修改于: 2020-11-18 10:16:24             🧑  作者: Mango


在本章中,我们将学习如何在应用程序之间共享数据。用户经常会看到他们很高兴与他人共享或在其他应用程序中使用的信息。如今,用户希望使用技术与他人建立联系并共享。

用户可能要分享-

  • 与他们的社交网络的链接
  • 将图片复制到报告中
  • 将文件上传到云存储

当今的应用程序需要确保用户使用的数据也可供用户共享和交换。共享是一项轻量级功能,可以轻松添加到您的UWP应用程序中。这些应用程序可以通过多种方式与其他应用程序交换数据。

在UWP应用程序中,可以通过以下方式支持共享功能:

  • 首先,应用程序可以是提供用户想要共享内容的源应用程序。

  • 其次,该应用程序可以是用户选择作为共享内容目标的目标应用程序。

  • 一个应用程序也可以既是源应用程序,也可以是目标应用程序。

分享内容

共享来自源应用程序的应用程序的内容非常简单。要执行任何共享操作,您将需要DataPackage类对象。该对象包含用户想要共享的数据。

DataPackage对象中可以包含以下类型的内容-

  • 纯文本
  • 统一资源标识符(URI)
  • 的HTML
  • 格式化文字
  • 位图
  • 档案
  • 开发人员定义的数据

共享数据时,可以包括一种或多种上述格式。为了支持应用程序中的共享,您首先需要获取DataTransferManager类的实例。

然后,它将注册一个事件处理程序,该事件处理程序在发生DataRequested事件时被调用。

DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView(); 
dataTransferManager.DataRequested += new TypedEventHandler(this.ShareTextHandler);

当您的应用程序接收到DataRequest对象时,您的应用程序就可以添加用户想要共享的内容。

private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e){
   DataRequest request = e.Request;
    
   // The Title is mandatory 
   request.Data.Properties.Title = "Share Text Example"; 
   request.Data.Properties.Description = "A demonstration that shows how to share text."; 
   request.Data.SetText("Hello World!"); 
}

您的应用程序共享的任何内容都必须包含两个属性-

  • Title属性,它是必需的,必须设置。
  • 内容本身。

接收共享内容

如果希望您的应用程序可以接收共享内容,那么您要做的第一件事就是声明它支持共享合同。声明后,系统将使您的应用程序可用于接收内容。

添加对股份合同的支持-

  • 双击package.appmanifest文件。

  • 转到“声明”选项卡。从“可用声明”列表中选择“共享目标 ,然后单击“添加”按钮。

分享目标

  • 如果希望您的应用程序接收任何类型的文件作为共享内容,则可以指定文件类型和数据格式。

  • 要指定您支持的数据格式,请转到“声明”页面的数据格式”部分,然后单击“添加新的”

  • 输入您支持的数据格式的名称。例如, “文本”

  • 要指定您支持的文件类型,请在“声明”页面的支持的文件类型”部分中,单击“添加新的”

  • 键入您要支持的文件扩展名,例如.pdf

  • 如果要支持所有文件类型,请选中SupportsAnyFileType框。

支持所有文件

  • 当用户选择您的应用程序作为共享数据的目标应用程序时,将触发OnShareTargetActivated事件。

  • 您的应用需要处理此事件以处理用户想要共享的数据。

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) { 
   // Code to handle activation goes here.  
}
  • 用户希望与任何应用程序共享的所有数据都包含在ShareOperation对象中。您还可以检查其中包含的数据的格式。

下面给出的是处理纯文本格式共享内容的代码段。

ShareOperation shareOperation = args.ShareOperation;
 
if (shareOperation.Data.Contains(StandardDataFormats.Text)) {
   string text = await shareOperation.Data.GetTextAsync(); 
   
   // To output the text from this example, you need a TextBlock control 
   // with a name of "sharedContent". 
   sharedContent.Text = "Text: " + text; 
}

让我们来看一个简单的示例,创建一个新的UWP项目,该项目将共享一个Web链接。

下面给出的是XAML代码,其中创建了具有某些属性的按钮。


   
    
    
       
          
                
          
      
        
    
    

下面提供了实现按钮单击事件并在其中提供URI共享代码的C#代码。

using System; 

using Windows.ApplicationModel.DataTransfer; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls;  

// The Blank Page item template is documented at 
   http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409  
    
namespace UWPSharingDemo {
 
   ///  
      /// An empty page that can be used on its own or navigated to within a Frame. 
   ///  
    
   public sealed partial class MainPage : Page {
    
      DataTransferManager dataTransferManager;
        
      public MainPage() {
         this.InitializeComponent(); 
         dataTransferManager = DataTransferManager.GetForCurrentView();  
         dataTransferManager.DataRequested += dataTransferManager_DataRequested; 
      }
        
      void dataTransferManager_DataRequested(DataTransferManager sender,
         DataRequestedEventArgs args) { 
            Uri sharedWebLink = new Uri("https://msdn.microsoft.com");
                
            if (sharedWebLink != null) {
               DataPackage dataPackage = args.Request.Data; 
               dataPackage.Properties.Title = "Sharing MSDN link"; 
                
               dataPackage.Properties.Description = "The Microsoft Developer Network (MSDN)
                  is designed to help developers write applications using Microsoft 
                  products and technologies.";
                    
               dataPackage.SetWebLink(sharedWebLink); 
            } 
      }
        
      private void InvokeShareContractButton_Click(object sender, RoutedEventArgs e) {
         DataTransferManager.ShowShareUI(); 
      }
        
   } 
} 

编译并执行上述代码后,您将在模拟器上看到以下页面。

编译并执行

单击该按钮时,它将提供共享在哪个应用程序上的选项。

分享申请

单击消息传递,将显示以下窗口,您可以从中将链接发送给任何人。

接收申请