Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Panel Sdílet ve Windows je uživatelské rozhraní poskytované systémem, které uživatelům umožňuje sdílet obsah z vaší aplikace do dalších aplikací ve Windows. Tato příručka vysvětluje, jak implementovat kontrakt Share napříč aplikacemi MSIX v balíčku, progresivními webovými aplikacemi (PWA) a nebalenými aplikacemi Win32.
| Oddíl | Co najdete |
|---|---|
| Volba přístupu ke sdílení | Vyberte správnou sadu rozhraní API pro aplikace UWP, desktopové aplikace nebo aplikace PWA |
| Implementace sdílení pro aplikace pro UPW |
DataTransferManager.GetForCurrentView a ShowShareUI |
| Implementujte sdílení pro PWA | Integrace rozhraní API služby Web Share |
| Implementace sdílení pro desktopové aplikace |
IDataTransferManagerInteropsdílení jednotlivých oken pro WinUI 3, WPF (Windows Presentation Foundation), WinForms |
| Události na straně zdroje | Sledování výběru cíle, dokončení a zrušení |
| Osvědčené postupy pro sdílení | Doporučení pro spolehlivé chování na straně zdroje |
Volba přístupu ke sdílení
| Typ aplikace | Přístup | Sada rozhraní API |
|---|---|---|
| Aplikace pro UPW | Použijte DataTransferManager.GetForCurrentView a ShowShareUI |
Windows.ApplicationModel.DataTransfer |
| Desktopové aplikace (WinUI 3, WPF (Windows Presentation Foundation), WinForms) | Použijte IDataTransferManagerInterop pro sdílení jednotlivých oken (pro balené i nebalené aplikace) |
prostředí Windows Runtime přes zprostředkovatele komunikace s objekty COM |
| Progresivní webové aplikace (PWA) | Použijte rozhraní API Web Share a integraci se systémem Windows | W3C Web Share |
Implementovat sdílení v aplikacích UWP
Important
DataTransferManager.GetForCurrentView a ShowShareUI podporují se jenom v aplikacích pro UPW. Desktopové aplikace (WinUI 3, WPF (Windows Presentation Foundation) nebo WinForms – balené i nebalené) musí používat vzor IDataTransferManagerInterop, který je uvedený v článku Implementace funkce Sdílení pro desktopové aplikace.
1. Získání dataTransferManageru
V inicializaci stránky získejte odkaz na DataTransferManager:
using Windows.ApplicationModel.DataTransfer;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
DataTransferManager dtm = DataTransferManager.GetForCurrentView();
dtm.DataRequested += OnDataRequested;
}
}
2. Naplnění datového balíčku
Když uživatel zahájí sdílení (například klikne na tlačítko Sdílet), vytvořte DataPackage s obsahem a metadaty:
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
Když sdílíte adresu URL, použijte SetWebLink (nebo SetApplicationLink pro přímé odkazy) místo SetText. Cílové aplikace pak mohou generovat bohaté náhledy odkazů a správně obsluhovat navigaci, místo aby je považovaly jen za prostý text.
3. Zobrazení uživatelského rozhraní pro sdílení
Vyvolejte panel Sdílení stisknutím tlačítka nebo pomocí příkazu nabídky:
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();
}
Implementujte sdílení pro progresivní webové aplikace (PWA)
PWA používají rozhraní W3C Web Share API. Ujistěte se, že aplikace PWA má požadované vlastnosti manifestu pro integraci s Windows:
{
"name": "My PWA",
"short_name": "MyPWA",
"share_target": {
"action": "/share",
"method": "POST",
"enctype": "multipart/form-data",
"params": {
"files": [
{
"name": "media",
"accept": ["image/*"]
}
]
}
}
}
V jazyce JavaScript ve vaší aplikaci PWA použijte rozhraní 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);
}
}
}
}
Implementace sdílení pro desktopové aplikace (WinUI 3, WPF (Windows Presentation Foundation), WinForms)
Desktopové aplikace – ať už zabalené i nezabalené – používají rozhraní IDataTransferManagerInterop pro přístup k Share Sheetu pro každé okno zvlášť. To platí pro aplikace WinUI 3, WPF (Windows Presentation Foundation) a WinForms.
1. Deklarujte rozhraní vzájemné spolupráce a získejte 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. Naplnění a zobrazení
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);
}
Kompletní příklad viz v ukázce WPF (Windows Presentation Foundation) Share Source.
Události na straně zdroje
Pomocí těchto událostí ve zdrojových aplikacích můžete sledovat, co se stalo po otevření funkce Sdílet uživatelem.
| API | Když dojde k požáru | Proč ho použít |
|---|---|---|
DataTransferManager.DataRequested |
Uživatel spustí operaci sdílení. | Sestavte a připojte DataPackage |
DataTransferManager.TargetApplicationChosen |
Uživatel zvolí cílovou aplikaci. | Volitelná telemetrie pro výběr cíle |
DataPackage.ShareCompleted |
Sdílení je dokončeno. | Volitelná telemetrie úspěšnosti |
DataPackage.ShareCanceled |
Uživatel zruší sdílení. | Telemetrie volitelného zrušení |
Note
Tento příklad používá kvůli stručnosti GetForCurrentView, což se vztahuje na aplikace UWP. V desktopových aplikacích získejte DataTransferManager prostřednictvím IDataTransferManagerInterop.GetForWindow , jak je znázorněno výše, a pak připojte stejné události.
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 a DataPackage.Destroyed slouží především k práci se schránkou a vkládání. Obecně nejsou potřeba pro scénáře sdíleného zdroje.
Osvědčené postupy pro sdílení
Pomocí tohoto kontrolního seznamu můžete zachovat předvídatelné chování na straně zdroje.
| Doporučený | Vyhněte se | Proč je to důležité |
|---|---|---|
Použití SetWebLink nebo SetApplicationLink pro adresy URL |
Použití SetText pro adresy URL |
Odkazy se v cílových aplikacích vykreslují a směrují správně. |
Nastavení Title a volitelná metadata (Description, miniatura) |
Odesílání obsahu bez metadat | Zlepšuje přehlednost uživatelského rozhraní Pro sdílení a cílové vykreslování. |
Zpracujte TargetApplicationChosen, ShareCompleted a ShareCanceled, pokud potřebujete telemetrii |
Za předpokladu, že tyto signály pocházejí ze ShareOperation zdrojových aplikací |
Jedná se o signály na straně zdroje pro přehled po sdílení. |
| Zachovat prioritní a platnou sdílenou datovou část pro vybranou akci | Ve výchozím nastavení se odesílají nesouvisející nebo příliš velká data | Snižuje selhání a zlepšuje úspěšnost sdílení. |
Související obsah
Windows developer