Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Windows share sheet egy rendszer által biztosított felhasználói felület, amellyel a felhasználók tartalmat küldhetnek az alkalmazásból más Windows alkalmazásokba. Ez az útmutató bemutatja, hogyan valósíthatja meg a megosztási szerződést a csomagolt alkalmazások (MSIX), a progresszív Web Apps (PWA-k) és a csomagolatlan Win32-alkalmazások között.
| Szakasz | Mit fog találni? |
|---|---|
| A megosztási módszer kiválasztása | Válassza ki a megfelelő API-készletet UWP-, asztali vagy PWA-alkalmazásokhoz |
| Megosztás implementálása UWP-alkalmazásokhoz |
DataTransferManager.GetForCurrentView és ShowShareUI |
| A megosztási funkció implementálása PWA-khoz | Web Share API-integráció |
| Megosztás implementálása asztali alkalmazásokhoz |
IDataTransferManagerInteropAblakonkénti megosztás a WinUI 3, WPF, WinForms esetén |
| Forrásoldali események | A cél kiválasztásának, befejezésének és lemondásának megfigyelése |
| Ajánlott eljárások a megosztáshoz | Javaslatok a megbízható forrásoldali viselkedéshez |
A megosztási módszer kiválasztása
| Alkalmazás típusa | Approach | API-készlet |
|---|---|---|
| UWP-alkalmazások | Használja DataTransferManager.GetForCurrentView és ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Asztali alkalmazások (WinUI 3, WPF, WinForms) | Használat IDataTransferManagerInterop ablakonkénti megosztáshoz (csomagolt vagy csomagolatlan) |
Windows-futtatókörnyezet COM-együttműködésen keresztül |
| Progresszív webalkalmazások (PWA-k) | A Web Share API + Windows integráció használata | W3C webmegosztás |
Megosztás implementálása UWP-alkalmazásokhoz
Important
DataTransferManager.GetForCurrentView és ShowShareUI csak UWP-alkalmazásokban támogatottak. Az asztali alkalmazásoknak (WinUI 3, WPF vagy WinForms – csomagolt vagy csomagolatlan) az IDataTransferManagerInteropasztali alkalmazásokhoz készült Megosztás implementálásában látható mintát kell használniuk.
1. DataTransferManager lekérése
Az oldal inicializálásakor szerezzen hivatkozást a(z) DataTransferManager elemre:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. DataPackage feltöltése
Amikor a felhasználó megosztást kezdeményez (például egy Megosztás gombra kattint), hozzon létre egy DataPackage tartalmat és metaadatokat:
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 */;
}
Tipp
Ha megoszt egy URL-címet, használja SetWebLink (vagy SetApplicationLink mélyhivatkozások) helyett SetText. A célalkalmazások ezután részletes hivatkozás-előnézeteket hozhatnak létre, és helyesen kezelhetik a navigációt, ahelyett, hogy egyszerű szövegként kezelnék.
3. A Megosztás felhasználói felületének megjelenítése
A Share Sheet aktiválása egy gombra kattintva vagy menüparancsból:
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();
}
A „Share” funkció implementálása progresszív webalkalmazásokban
A PWA-k a W3C Web Share API-t használják. Győződjön meg arról, hogy a PWA rendelkezik az Windows integrálásához szükséges jegyzéktulajdonságokkal:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
A PWA JavaScriptben használja a Webes megosztás API-t:
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);
}
}
}
}
Megosztás implementálása asztali alkalmazásokhoz (WinUI 3, WPF, WinForms)
Az asztali alkalmazások – akár csomagolva, akár csomagolatlanul – a IDataTransferManagerInterop interfészt használják a Megosztás panel ablakonkénti eléréséhez. Ez a WinUI 3, WPF és WinForms-alkalmazásokra vonatkozik.
1. Deklarálja az interop interfészt, és szerezze be a DataTransferManagert
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. Feltöltés és megjelenítés
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);
}
Egy teljes példáért tekintse meg a WPF forrásminta megosztását.
Forrásoldali események
A forrásalkalmazásokban ezeket az eseményeket használva megfigyelheti, hogy mi történt, miután a felhasználó megnyitja a Megosztást.
| API | Amikor kigyullad | Mire használható |
|---|---|---|
DataTransferManager.DataRequested |
A felhasználó elindít egy megosztási műveletet | Hozza létre és csatolja a DataPackage |
DataTransferManager.TargetApplicationChosen |
A felhasználó kiválaszt egy célalkalmazást | Választható telemetriai adatok a cél kiválasztásához |
DataPackage.ShareCompleted |
A megosztás befejeződött | Választható sikertelemetria |
DataPackage.ShareCanceled |
A felhasználó megszakítja a megosztást | Választható lemondási telemetria |
Note
Ez a példa a rövidség kedvéért a(z) GetForCurrentView elemet használja, amely az UWP-alkalmazásokra vonatkozik. Asztali alkalmazásokban szerezze be a DataTransferManager-t a IDataTransferManagerInterop.GetForWindow segítségével a korábban bemutatott módon, majd rendelje hozzá ugyanazokat az eseménykezelőket.
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 és DataPackage.Destroyed elsősorban vágólapra és munkafolyamatok beillesztésére használhatók. Ezekre általában nincs szükség a megosztási forrásforgatókönyvekhez.
Ajánlott eljárások a megosztáshoz
Ezzel az ellenőrzőlistát használva kiszámíthatóvá teszi a forrásoldali viselkedést.
| Recommended | Kerülje el | Miért fontos? |
|---|---|---|
URL-ekhez használja a(z) SetWebLink vagy SetApplicationLink elemet |
Használja a(z) SetText elemet URL-ekhez |
A hivatkozások megfelelően renderelnek és irányt mutatnak a célalkalmazásokban |
Title és opcionális metaadatok beállítása (Description, bélyegkép) |
Tartalom küldése metaadatok nélkül | Javítja a Megosztás felület áttekinthetőségét és a célok megjelenítését |
Kezelje a(z) TargetApplicationChosen, ShareCompleted és ShareCanceled elemet, ha telemetriára van szüksége. |
Feltételezve, hogy ezek a jelek forrásalkalmazásokból származnak ShareOperation |
Ezek forrásoldali jelek a megosztás utáni megállapításokhoz |
| A megosztott adattartalmak legyenek a kiválasztott műveletre szabottak és érvényesek | Alapértelmezés szerint nem releváns vagy túlméretezett adatteher küldése | Csökkenti a hibákat, és javítja a megosztási siker arányát |
Kapcsolódó tartalom
Windows developer