WinRT的App间共享数据

本文介绍Windows应用中使用DataPackage进行数据共享的方法,包括构造DataPackage对象、设置属性及数据格式,以及通过剪贴板实现跨应用数据交换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标和源App通过DataPackage传输数据:

public sealed class DataPackage {
public DataPackage(); // Constructs a new DataPackage object
// Use to set properties (ApplicationName, Title, Description, Thumbnail, etc.)
public DataPackagePropertySet Properties { get; }
// Optional: Use this to indicate why you're sharing the package (None, Copy, Move, Link)
public DataPackageOperation RequestedOperation { get; set; }
// Call SetData several times to add the same content in different formats
public void SetData(String formatId, Object value);
// These methods are simple, type-safe wrappers over SetData for common types:
public void SetText(String value);
public void SetRtf(String value);
public void SetHtmlFormat(String value); // See WinRT's HtmlFormatHelper class
public void SetBitmap(RandomAccessStreamReference value);
public void SetApplicationLink(Uri value);
public void SetWebLink(Uri value);
public void SetStorageItems(IEnumerable<IStorageItem> value);
public void SetStorageItems(IEnumerable<IStorageItem> value, Boolean readOnly);
// When adding HTML with references to content inaccessible to the target app,
// add each URI and RandomAccessStreamReference to the ResourceMap so the target app can
// access the content.
// Example: If HTML has <img src="ms-appx:///Images/Photo.jpg"/> do this:
// String imgSrc = "ms-appx:///Images/Photo.jpg";
// ResourceMap.Add(imgSrc, RandomAccessStreamReference.CreateFromUri(new Uri(imgSrc)));
public IDictionary<String, RandomAccessStreamReference> ResourceMap { get; }
// Optional: Raised after target app pastes data (source app can delete content if desired)
public event TypedEventHandler<DataPackage, OperationCompletedEventArgs> OperationCompleted;
// Optional: Raised after DataPackage is GC'd. This allows the source app
// to delete content (such as a temporary file) if desired:
public event TypedEventHandler<DataPackage, Object> Destroyed;
// Sets a delegate to handle requests from the target app
// (see "Delayed rendering of shared content")
public void SetDataProvider(String formatId, DataProviderHandler delayRenderer);
// Returns a read-only version of the DataPackage object (this is what target apps get)
public DataPackageView GetView();
}

支持的格式如下:

public static class StandardDataFormats {
public static String Text { get; } // "Text"
public static String Rtf { get; } // "Rich Text Format"
public static String Html { get; } // "HTML Format"
public static String Bitmap { get; } // "Bitmap"
public static String ApplicationLink { get; } // "ApplicationLink"
public static String WebLink { get; } // "UniformResourceLocatorW"
public static String StorageItems { get; } // "Shell IDList Array"
}

用户也可以自己定义数据格式,具体描述见http://schema.org 和https://github.com/AndreiMarukovich/Transhipment


还可以通过剪贴板共享:

// Static class since there is only one system clipboard
public static class Clipboard {
// Methods called by share source apps:
public static void Clear(); // Puts an empty DataPackage on the clipboard
public static void SetContent(DataPackage content); // Replaces any existing content
public static void Flush(); // Keeps content on clipboard even if app terminates
// Methods called by share target apps:
public static DataPackageView GetContent(); // Returns read-only view of DataPackage
// Raised when contents change (target apps use this to know if paste is possible)
public static event EventHandler<object> ContentChanged;
}

必须通过UI线程访问Clipboard:

private void PutDataPackageOnClipboard(DataPackageOperation operation) {
DataPackage dp = new DataPackage();
// Set desired properties:
dp.Properties.ApplicationName = Package.Current.DisplayName;
dp.Properties.Title = "DataPackage Title";
dp.Properties.Description = "DataPackage Description";
dp.RequestedOperation = operation; // None, Copy, Move, or Link
// Add desired data formats:
dp.SetText(m_txt.Text); // Pulling text from a TextBox control
// Optional: register event handlers:
dp.OperationCompleted += OnShareCompleted; // Mandatory for Move so source can delete data
dp.Destroyed += OnDataPackageDestroyed;
// Put DataPackage on clipboard. NOTE: The Clipboard makes a copy of the package;
// changes made to the DataPackage object do not impact what's already on the clipboard.
Clipboard.SetContent(dp);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值