Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het Windows Share Sheet is een door het systeem geleverde gebruikersinterface waarmee gebruikers inhoud van uw app kunnen verzenden naar andere Windows-apps. In deze handleiding wordt uitgelegd hoe u het Share-contract implementeert in verpakte apps (MSIX), Progressive Web Apps (PWA's) en uitgepakte Win32-apps.
In dit artikel
| Afdeling | Wat u zult vinden |
|---|---|
| Uw benadering voor delen kiezen | De juiste API-set kiezen voor UWP-, desktop- of PWA-apps |
| Share implementeren voor UWP-apps |
DataTransferManager.GetForCurrentView en ShowShareUI |
| Share implementeren voor PWA's | Web Share-API-integratie |
| Share implementeren voor bureaublad-apps |
IDataTransferManagerInterop delen per afzonderlijk venster voor WinUI 3, WPF, WinForms |
| Gebeurtenissen aan de bronzijde | Doelselectie, voltooiing en annulering bekijken |
| Aanbevolen procedures voor delen | Aanbevelingen voor betrouwbaar gedrag aan de bronzijde |
Kies hoe u wilt delen
| Type van de app | Aanpak | API set |
|---|---|---|
| UWP-apps | Gebruiken DataTransferManager.GetForCurrentView en ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Bureaublad-apps (WinUI 3, WPF, WinForms) | Gebruiken IDataTransferManagerInterop voor delen per venster (verpakt of uitgepakt) |
Windows Runtime via COM-interoperabiliteit |
| Progressive Web Apps (PWA) | De webshare-API en Windows-integratie gebruiken | W3C-webshare |
Share implementeren voor UWP-apps
Important
DataTransferManager.GetForCurrentView en ShowShareUI worden alleen ondersteund in UWP-apps. Desktop-apps (WinUI 3, WPF of WinForms - verpakt of uitgepakt) moeten het IDataTransferManagerInterop patroon gebruiken dat wordt weergegeven in Share implementeren voor bureaublad-apps.
1. Haal een DataTransferManager op
Verkrijg in uw paginainitialisatie een verwijzing naar DataTransferManager:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Een DataPackage vullen
Wanneer de gebruiker de share initieert (bijvoorbeeld op een knop Delen klikken), maakt u een DataPackage met de inhoud en metagegevens:
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
DataPackage data = request.Data;
// Set a title (required)
data.Properties.Title = "My shared content";
// Set content - choose one or more:
data.SetText("Here's some text to share");
// For URLs, use SetWebLink to enable rich link previews:
// data.SetWebLink(new Uri("https://example.com"));
// For files or images:
// IStorageItem item = await StorageFile.GetFileFromPathAsync(filePath);
// data.SetStorageItems(new[] { item });
// Optional: add description and thumbnail
data.Properties.Description = "A brief description";
// data.Properties.Thumbnail = /* RandomAccessStreamReference */;
}
Tip
Wanneer u een URL deelt, gebruikt u SetWebLink (of SetApplicationLink voor deeplinks) in plaats van SetText. Doel-apps kunnen vervolgens voorbeeldweergaven van rich link genereren en navigatie correct afhandelen in plaats van deze als tekst zonder opmaak te behandelen.
3. Toon de deelinterface
Open het deelvenster Delen via een klik op een knop of een menuopdracht:
private void ShareButton_Click(object sender, RoutedEventArgs e)
{
// ShowShareUI is a static method on DataTransferManager.
// The DataRequested handler was registered in step 1.
DataTransferManager.ShowShareUI();
}
Share implementeren voor progressive Web Apps (PWA's)
PWA's maken gebruik van de W3C Web Share-API. Zorg ervoor dat uw PWA over de vereiste manifesteigenschappen beschikt om te integreren met Windows:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
Gebruik in uw PWA JavaScript de Web Share-API:
async function shareContent() {
if (navigator.share) {
try {
await navigator.share({
title: 'Check this out',
text: 'Great content',
url: 'https://example.com/page'
});
} catch (err) {
if (err.name !== 'AbortError') {
console.error('Share failed:', err);
}
}
}
}
Share implementeren voor bureaublad-apps (WinUI 3, WPF, WinForms)
Desktop-apps, ongeacht of deze zijn verpakt of uitgepakt, gebruiken de IDataTransferManagerInterop interface om per venster toegang te krijgen tot het Share-blad. Dit geldt voor WinUI 3-, WPF- en WinForms-apps.
1. Declareer de interop-interface en verkrijg een DataTransferManager
using Windows.ApplicationModel.DataTransfer;
[System.Runtime.InteropServices.ComImport]
[System.Runtime.InteropServices.Guid("3A3DCD6C-3EAB-43DC-BCDE-45671CE800C8")]
[System.Runtime.InteropServices.InterfaceType(
System.Runtime.InteropServices.ComInterfaceType.InterfaceIsIUnknown)]
interface IDataTransferManagerInterop
{
IntPtr GetForWindow([System.Runtime.InteropServices.In] IntPtr appWindow,
[System.Runtime.InteropServices.In] ref Guid riid);
void ShowShareUIForWindow(IntPtr appWindow);
}
public sealed partial class MainWindow // WinUI 3 Window, WPF Window, or WinForms Form
{
// IID of DataTransferManager, passed as the riid to GetForWindow:
static readonly Guid _dtm_iid =
new Guid(0xa5caee9b, 0x8708, 0x49d1, 0x8d, 0x36, 0x67, 0xd2, 0x5a, 0x8d, 0xa0, 0x0c);
private DataTransferManager _dtm;
// Call this from your window or form constructor (or load handler):
private void InitializeShare()
{
// Retrieve the window handle (HWND) for the current window:
// WinUI 3: IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
// WPF: IntPtr hWnd = new System.Windows.Interop.WindowInteropHelper(this).Handle;
// WinForms: IntPtr hWnd = this.Handle;
IntPtr hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
IDataTransferManagerInterop interop =
DataTransferManager.As<IDataTransferManagerInterop>();
_dtm = WinRT.MarshalInterface<DataTransferManager>.FromAbi(
interop.GetForWindow(hWnd, _dtm_iid));
_dtm.DataRequested += (sender, args) => OnDataRequested(args);
}
}
2. Vullen en weergeven
private void OnDataRequested(DataRequestedEventArgs args)
{
DataRequest request = args.Request;
DataPackage data = request.Data;
data.Properties.Title = "Share from my desktop app";
data.SetText("Shared content");
// For URLs:
// data.SetWebLink(new Uri("https://example.com"));
// For files:
// var item = await StorageFile.GetFileFromPathAsync(filePath);
// data.SetStorageItems(new[] { item });
}
// In your Share button handler:
private void ShareButton_Click()
{
var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
var interop = DataTransferManager.As<IDataTransferManagerInterop>();
interop.ShowShareUIForWindow(hWnd);
}
Zie het voorbeeld WPF Share Source voor een volledig voorbeeld.
Gebeurtenissen aan de bronzijde
Gebruik deze gebeurtenissen in bron-apps om te zien wat er is gebeurd nadat de gebruiker Share heeft geopend.
| API | Wanneer het brandt | Redenen om dit te gebruiken |
|---|---|---|
DataTransferManager.DataRequested |
De gebruiker start een deelactie | Monteer en bevestig de DataPackage |
DataTransferManager.TargetApplicationChosen |
De gebruiker kiest een doel-app | Optionele telemetrie voor doelselectie |
DataPackage.ShareCompleted |
Het delen is voltooid | Optionele succestelemetrie |
DataPackage.ShareCanceled |
De gebruiker annuleert de share | Optionele telemetrie voor annulering |
Note
In dit voorbeeld wordt GetForCurrentView gebruikgemaakt van beknoptheid, wat van toepassing is op UWP-apps. In desktoptoepassingen verkrijgt u de DataTransferManager tot en met IDataTransferManagerInterop.GetForWindow zoals eerder getoond, en koppelt u vervolgens dezelfde events.
private void RegisterShareEvents()
{
var dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
dtm.TargetApplicationChosen += OnTargetChosen;
}
private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
DataRequest request = args.Request;
request.Data.Properties.Title = "Share from my app";
request.Data.SetText("Hello from Windows Share");
request.Data.ShareCompleted += OnShareCompleted;
request.Data.ShareCanceled += OnShareCanceled;
}
private void OnTargetChosen(DataTransferManager sender, TargetApplicationChosenEventArgs args)
{
// Optional: telemetry only
Debug.WriteLine($"Target app: {args.ApplicationName}");
}
private void OnShareCompleted(DataPackage sender, ShareCompletedEventArgs args)
{
Debug.WriteLine("Share completed");
}
private void OnShareCanceled(DataPackage sender, object args)
{
Debug.WriteLine("Share canceled");
}
Note
DataPackage.OperationCompleted en DataPackage.Destroyed zijn voornamelijk bedoeld voor Klembord- en plakwerkstromen. Ze zijn over het algemeen niet nodig voor Share-bronscenario's.
Aanbevolen procedures voor delen
Gebruik deze controlelijst om het gedrag aan de bronzijde voorspelbaar te houden.
| Aanbevolen | Vermijd | Waarom het belangrijk is |
|---|---|---|
Gebruiken SetWebLink of SetApplicationLink voor URL's |
Gebruiken SetText voor URL's |
Links worden correct weergegeven en verwijzen correct door in doelapps |
Stel Title en optionele metagegevens (Description, miniatuurafbeelding) |
Inhoud zonder metagegevens verzenden | Verbetert de duidelijkheid van de Share-UI en de doelweergave |
Verwerk TargetApplicationChosen, ShareCompleted en ShareCanceled als u telemetrie nodig hebt |
Ervan uitgaande dat deze signalen afkomstig zijn uit ShareOperation bron-apps |
Dit zijn bronsignalen voor inzicht na delen |
| Houd gedeelde payloads toegespitst op en geldig voor de geselecteerde actie | Standaard niet-relevante of te grote payloads verzenden | Vermindert mislukkingen en verbetert het slagingspercentage van delen |
Verwante inhoud
Windows developer