Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Windows-Freigabeblatt ist eine vom System bereitgestellte Benutzeroberfläche, mit der Benutzer Inhalte aus Ihrer App an andere Windows-Apps senden können. In diesem Leitfaden wird erläutert, wie Sie den Freigabe-Vertrag für verpackte Apps (MSIX), Progressive Web-Apps (PWAs) und entpackte Win32-Apps implementieren.
In diesem Artikel
| Abschnitt | Was Sie finden |
|---|---|
| Auswählen Ihres Freigabeansatzes | Auswählen des richtigen API-Satzes für UWP-, Desktop- oder PWA-Apps |
| Freigabe für UWP-Apps implementieren |
DataTransferManager.GetForCurrentView und ShowShareUI |
| Freigabe für PWAs implementieren | Web Share API-Integration |
| Share für Desktop-Apps implementieren |
IDataTransferManagerInterop Pro-Fenster-Freigabe für WinUI 3, WPF, WinForms |
| Quellseitige Ereignisse | Verfolgen Sie Zielauswahl, Abschluss und Abbruch |
| Bewährte Methoden für Share | Empfehlungen für ein zuverlässiges quellseitiges Verhalten |
Freigabeansatz
| App-Typ | Ansatz | API-Satz |
|---|---|---|
| UWP-Apps | Verwenden von DataTransferManager.GetForCurrentView und ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Desktop-Apps (WinUI 3, WPF, WinForms) | auswählen IDataTransferManagerInterop für Pro-Fenster-Freigabe (gepackt oder nicht gepackt) |
Windows-Runtime über COM-Interop |
| Progressive Web-Apps (PWAs) | Verwenden Sie die Web Share API + Windows-Integration | W3C Web Share |
Teilen für UWP-Apps implementieren
Important
DataTransferManager.GetForCurrentView und ShowShareUI werden nur in UWP-Apps unterstützt. Desktop-Apps (WinUI 3, WPF oder WinForms – verpackt oder entpackt) müssen das Muster verwenden, das IDataTransferManagerInterop in "Implementieren von Share für Desktop-Apps" angezeigt wird.
1. Einen DataTransferManager abrufen
Rufen Sie bei der Seiteninitialisierung eine Referenz auf DataTransferManager ab:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Auffüllen eines DataPackage
Wenn der Benutzer die Freigabe initiiert (z. B. auf eine Schaltfläche "Freigeben" klickt), erstellen Sie einen DataPackage mit dem Inhalt und den Metadaten:
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
Wenn Sie eine URL freigeben, verwenden Sie SetWebLink (oder SetApplicationLink für Deep-Links) anstelle von SetText. Ziel-Apps können dann Rich-Link-Vorschauen generieren und die Navigation ordnungsgemäß behandeln, anstatt sie als Nur-Text zu behandeln.
3. Zeigen Sie die Freigabe-UI
Das Share Sheet durch einen Klick auf eine Schaltfläche oder einen Menübefehl auslösen:
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 für Progressive Web-Apps (PWAs) implementieren
PWAs verwenden die W3C Web Share API. Stellen Sie sicher, dass Ihre PWA über die erforderlichen Manifesteigenschaften verfügt, die in Windows integriert werden können:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
Verwenden Sie in Ihrem PWA-JavaScript die 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);
}
}
}
}
Implementieren von Share für Desktop-Apps (WinUI 3, WPF, WinForms)
Desktop Apps - ob gepackt oder ungepackt - verwenden die IDataTransferManagerInterop Schnittstelle für den Zugriff auf das Freigabeblatt auf einer Pro-Fenster-Basis. Dies gilt für WinUI 3-, WPF- und WinForms-Apps.
1. Deklarieren Sie die Interop-Schnittstelle und beziehen Sie einen 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. Ausfüllen und anzeigen
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);
}
Ein vollständiges Beispiel finden Sie im Beispiel WPF Share Source.
Quellseitige Ereignisse
Verwenden Sie diese Ereignisse in Quell-Apps, um zu beobachten, was passiert ist, nachdem der Benutzer "Freigeben" geöffnet hat.
| API | Bei Aktivierung | Argumente für die Verwendung |
|---|---|---|
DataTransferManager.DataRequested |
Der Benutzer startet einen Freigabevorgang. | Erstellen und DataPackage anfügen |
DataTransferManager.TargetApplicationChosen |
Der Benutzer wählt eine Ziel-App aus. | Optionale Telemetrie für die Zielauswahl |
DataPackage.ShareCompleted |
Die Freigabe ist abgeschlossen | Optionale Erfolgstelemetrie |
DataPackage.ShareCanceled |
Der Benutzer bricht die Freigabe ab | Optionale Abbruchtelemetrie |
Hinweis
In diesem Beispiel wird GetForCurrentView aus Platzgründen verwendet, was für UWP-Apps gilt. Rufen Sie in Desktop-Apps das DataTransferManager über IDataTransferManagerInterop.GetForWindow ab, wie zuvor gezeigt, und fügen Sie anschließend dieselben Ereignisse hinzu.
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");
}
Hinweis
DataPackage.OperationCompleted und DataPackage.Destroyed sind in erster Linie für Workflows zur Zwischenablage und zum Einfügen gedacht. Sie sind in der Regel nicht für Share-Quellszenarien erforderlich.
Bewährte Methoden für Share
Verwenden Sie diese Checkliste, um das quellseitige Verhalten vorhersehbar zu halten.
| Empfohlen | Vermeiden | Warum dies wichtig ist |
|---|---|---|
Verwenden SetWebLink oder SetApplicationLink für URLs |
Verwenden Sie SetText für URLs |
Links werden in den Ziel-Apps korrekt dargestellt und weitergeleitet. |
Title und optionale Metadaten (Description, Vorschaubild) festlegen |
Senden von Inhalten ohne Metadaten | Verbessert die Transparenz der Freigabeoberfläche und das Rendering der Ziele |
Verwenden Sie TargetApplicationChosen, ShareCompleted und ShareCanceled, wenn Sie Telemetrie benötigen. |
Angenommen, diese Signale stammen aus ShareOperation Quellanwendungen |
Dies sind Signale von der Quellseite für Einblicke nach dem Teilen |
| Die freigegebenen Payloads bleiben fokussiert und für die ausgewählte Aktion gültig | Senden von unzusammenhängenden oder übergroßen Payloads als Standard | Reduziert Fehlschläge und verbessert die Erfolgsquote beim Teilen. |
Verwandte Inhalte
Windows developer