Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Windows Share Sheet är ett systembaserat användargränssnitt som låter användare skicka innehåll från din app till andra Windows appar. Den här guiden förklarar hur du implementerar Share-kontraktet i paketerade appar (MSIX), Progressive Web Apps (PWA:er) och opaketerade Win32-appar.
I den här artikeln
| Avsnitt | Det här hittar du |
|---|---|
| Välj delningsmetod | Välj rätt API-uppsättning för UWP-, skrivbords- eller PWA-appar |
| Implementera Dela för UWP-appar |
DataTransferManager.GetForCurrentView och ShowShareUI |
| Implementera delning för PWA:er | Integrering av Web Share API |
| Implementera Share för skrivbordsappar |
IDataTransferManagerInteropdelning per fönster för WinUI 3, WPF, WinForms |
| Händelser på källsidan | Observera målval, slutförande och annullering |
| Metodtips för Share | Rekommendationer för tillförlitligt beteende på källsidan |
Välj delningsmetod
| Apptyp | Metod | API-uppsättning |
|---|---|---|
| UWP-appar | Använda DataTransferManager.GetForCurrentView och ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Skrivbordsappar (WinUI 3, WPF, WinForms) | Använd IDataTransferManagerInterop för delning per fönster (paketerat eller opaketerat) |
Windows Runtime via COM interop |
| Progressiva webbappar (PWA) | Använd Web Share API + Windows-integrering | W3C Web Share |
Implementera delning för UWP-appar
Important
DataTransferManager.GetForCurrentView och ShowShareUI stöds endast i UWP-appar. Skrivbordsappar (WinUI 3, WPF eller WinForms - paketerade eller opaketerade) måste använda mönstret IDataTransferManagerInterop som visas i Implementera Dela för skrivbordsappar.
1. Hämta en DataTransferManager
I sidinitieringen hämtar du en referens till DataTransferManager:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Fyll i ett DataPackage
När användaren initierar delning (till exempel klickar på knappen Dela) ska du skapa en DataPackage med innehållet och metadata:
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
När du delar en URL använder du SetWebLink (eller SetApplicationLink för djupa länkar) i stället SetTextför . Målappar kan sedan generera rika länkförhandsvisningar och hantera navigering korrekt, i stället för att behandla den som vanlig text.
3. Visa delningsgränssnittet
Öppna delningspanelen med ett knapptryck eller ett menykommando:
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();
}
Implementera delning för progressiva webbappar (PWA:er)
PWA:er använder W3C:s Web Share API. Kontrollera att PWA har de manifestegenskaper som krävs för att integrera med Windows:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
I JavaScript-koden för din PWA använder du Web Share API:et:
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);
}
}
}
}
Implementera Share för skrivbordsappar (WinUI 3, WPF, WinForms)
Skrivbordsappar – oavsett om de är paketerade eller opaketerade – använder IDataTransferManagerInterop-gränssnittet för att komma åt delningspanelen för varje fönster. Detta gäller för WinUI 3-, WPF- och WinForms-appar.
1. Deklarera interop-gränssnittet och skaffa en 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. Fyll i och visa
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);
}
Ett komplett exempel finns i WPF Share Source-exemplet.
Händelser på källsidan
Använd dessa händelser i källappar för att se vad som hände när användaren öppnar Dela.
| API | När det utlöses | Varför du ska använda det |
|---|---|---|
DataTransferManager.DataRequested |
Användaren startar en delningsåtgärd | Skapa och bifoga DataPackage |
DataTransferManager.TargetApplicationChosen |
Användaren väljer en målapp | Valfri telemetri för målval |
DataPackage.ShareCompleted |
Delningen är klar | Valfri telemetri för lyckade händelser |
DataPackage.ShareCanceled |
Användaren avbryter delningen | Valfri telemetri för avbokning |
Anmärkning
Det här exemplet används GetForCurrentView för korthet, vilket gäller för UWP-appar. I skrivbordsappar hämtar du DataTransferManager via IDataTransferManagerInterop.GetForWindow, som visats tidigare, och ansluter sedan samma händelser.
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");
}
Anmärkning
DataPackage.OperationCompleted och DataPackage.Destroyed är främst avsedda för arbetsflöden för Urklipp och inklistring. De behövs vanligtvis inte i Share source-scenarier.
Metodtips för Share
Använd den här checklistan för att hålla beteendet på källsidan förutsägbart.
| Rekommenderad | Undvik | Varför det spelar roll |
|---|---|---|
Använda SetWebLink eller SetApplicationLink för URL:er |
Använd SetText för URL:er |
Länkar återges korrekt och leder till rätt målapplikationer |
Ange Title och valfria metadata (Description, miniatyrbild) |
Skicka innehåll utan metadata | Förbättrar tydligheten i delningsgränssnittet och återgivningen av mål |
Hantera TargetApplicationChosen, ShareCompletedoch ShareCanceled om du behöver telemetri |
Om vi antar att dessa signaler kommer från ShareOperation i källapparna |
Det här är signaler från källan för insikter efter delning |
| Håll delade nyttolaster fokuserade och giltiga för den valda åtgärden | Skicka orelaterade eller överdimensionerade nyttolaster som standard | Minskar antalet misslyckanden och förbättrar andelen lyckade delningar |
Relaterat innehåll
Windows developer