Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le contrat de partage Windows permet aux utilisateurs de partager rapidement du contenu( texte, liens, photos et vidéos) de votre application à d’autres applications. Par exemple, un utilisateur peut souhaiter partager une page web avec ses amis à l’aide d’une application de réseau social ou enregistrer un lien dans une application de notes pour faire référence ultérieurement.
Cet article explique comment implémenter le côté source du contrat de partage : le code qui prépare le contenu et ouvre la feuille de partage Windows à partir de votre application. Pour plus d’informations sur la réception de contenu partagé, consultez Recevoir des données partagées dans votre application Windows.
Les Windows.ApplicationModel.DataTransfer API utilisées dans cet article fonctionnent pour les applications qui ont une identité de package, notamment les applications UWP et les applications de bureau WinUI 3 empaquetées. Les applications Win32 non empaquetées peuvent participer en accordant l’identité du package, puis en utilisant IDataTransferManagerInterop.
Note
Les applications de bureau WinUI 3 n’ont pas de CoreWindow, vous ne pouvez donc pas appeler directement DataTransferManager.GetForCurrentView() ou DataTransferManager.ShowShareUI(). Utilisez plutôt l’interface d’interopérabilité COM IDataTransferManagerInterop pour associer DataTransferManager au handle de votre fenêtre et pour afficher l’interface utilisateur de partage. Pour obtenir des exemples de code, consultez Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow. Vous pouvez également faire référence à l’exemple d’application source de contenu de partage WPF pour une implémentation complète.
Configurer un gestionnaire d’événements
Inscrivez un gestionnaire d’événements DataRequested sur votre DataTransferManager instance. Cet événement se déclenche lorsque l’utilisateur appelle Partager, par exemple lorsqu’il appuie sur un bouton Partager dans votre application, ou lorsque votre application détermine qu’il existe du contenu prêt à être partagé.
Pour les applications de bureau WinUI 3, obtenez le DataTransferManager pour votre fenêtre à l’aide de IDataTransferManagerInterop, comme décrit dans Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow.
Fournir du contenu dans le gestionnaire DataRequested
Lorsqu’un événement DataRequested se produit, votre application reçoit un objet DataRequest contenant un DataPackage que vous remplissez avec le contenu à partager. Vous devez définir un titre et au moins un format de données. Une description est facultative mais recommandée.
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
request.Data.Properties.Title = "Contoso article";
request.Data.Properties.Description = "An interesting article from Contoso.";
request.Data.SetText("Read this article at Contoso.com.");
request.Data.SetWebLink(new Uri("https://contoso.com/articles/1234"));
}
Avertissement
La propriété Title est requise. Si vous ne définissez pas de titre, l’opération de partage échoue.
Choisir des formats de données
DataPackage prend en charge plusieurs formats de données intégrés. Vous pouvez fournir plusieurs formats dans le même package : l’application de réception utilise le format le mieux pris en charge.
| Format | Method |
|---|---|
| Texte brut | SetText |
| Liens Web | SetWebLink |
| Liens d’application | SetApplicationLink |
| HTML | SetHtmlFormat |
| Texte enrichi (RTF) | SetRtf |
| Images bitmap. | SetBitmap |
| Fichiers et dossiers | SetStorageItems |
| Données personnalisées définies par les développeurs | SetData |
Définir des propriétés
DataPackagePropertySet vous permet d’attacher des métadonnées supplémentaires au contenu partagé. L’ajout d’une miniature donne à la feuille de partage un aperçu visuel plus riche. Pour plus d’informations, consultez DataPackagePropertySet.
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request; // The DataRequested event provides the request via args.Request.
request.Data.Properties.Title = "Sunset photo";
request.Data.Properties.Description = "Taken at Lake Tahoe.";
// Providing a thumbnail is optional but improves the share sheet preview.
// request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(thumbnailFile);
}
Lancer l’interface utilisateur de partage
Après l’inscription à l’événementDataRequested, ouvrez la feuille de partage Windows lorsque l’utilisateur appelle Partager. Pour les applications de bureau WinUI 3, appelez ShowShareUIForWindow sur l'interface IDataTransferManagerInterop en transmettant le HWND de votre fenêtre. Pour obtenir des exemples de code, consultez Afficher les objets d’interface utilisateur WinRT qui dépendent de CoreWindow.
Gérer les erreurs
Si votre application ne peut pas fournir de contenu partagé, par exemple, car l’utilisateur n’a rien sélectionné, appelez FailWithDisplayText pour afficher un message informatif dans l’interface utilisateur de partage :
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
if (string.IsNullOrEmpty(selectedText))
{
args.Request.FailWithDisplayText("Select some text in the app before sharing.");
return;
}
args.Request.Data.Properties.Title = "Selected text";
args.Request.Data.SetText(selectedText);
}
Retarder le partage avec des délégués
Si la production des données de partage est gourmande en ressources( par exemple, l’encodage d’une image volumineuse à plusieurs résolutions) utilise un délégué afin que les données ne soient produites que lorsque l’application de réception le demande. Cela évite le travail inutile lorsque l’utilisateur n’a pas encore choisi de cible.
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
args.Request.Data.Properties.Title = "High-res photo";
args.Request.Data.SetDataProvider(StandardDataFormats.Bitmap, OnDeferredImageRequested);
}
// Note: DataProviderHandler requires async void. The try/finally ensures the
// deferral completes even if an exception occurs.
private async void OnDeferredImageRequested(DataProviderRequest request)
{
DataProviderDeferral deferral = request.GetDeferral();
try
{
if (this.imageStream == null)
{
return;
}
InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();
// Decode the source image and re-encode at 50% size.
BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(this.imageStream);
BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(
inMemoryStream, imageDecoder);
imageEncoder.BitmapTransform.ScaledWidth =
(uint)(imageDecoder.OrientedPixelWidth * 0.5);
imageEncoder.BitmapTransform.ScaledHeight =
(uint)(imageDecoder.OrientedPixelHeight * 0.5);
await imageEncoder.FlushAsync();
request.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
}
finally
{
deferral.Complete();
}
}
Voir aussi
- Recevoir des données partagées dans votre application Windows
- Intégrer les applications empaquetées à Windows Share
- Intégrer les applications non packagées à Windows Share
- Afficher des objets d’interface utilisateur WinRT qui dépendent de CoreWindow
- IDataTransferManagerInterop
- DataTransferManager
- DataPackage
- DataRequest
- FailWithDisplayText
- exemple d’application source de partage de contenu WPF
Windows developer