首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 8 風格應用開發入門:分享合約來源與目標完整實作

     編輯:關於.NET

本文示範分享來源應用的三步驟實作、分享目標應用的清單宣告與啟動處理、快速連結回傳機制,以及 DataTransferManager 核心 API 使用。

建構分享來源應用

步驟 1:註冊 DataRequested 事件

在欲分享的頁面 OnNavigatedTo 註冊,OnNavigatedFrom 註銷。

protected override void OnNavigatedTo(NavigationEventArgs e) {
    DataTransferManager.GetForCurrentView().DataRequested += OnDataRequested;
}

protected override void OnNavigatedFrom(NavigationEventArgs e) {
    DataTransferManager.GetForCurrentView().DataRequested -= OnDataRequested;
}

註冊 DataRequested 事件

步驟 2:填充資料包

private void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs args) {
    var request = args.Request;
    request.Data.Properties.Title = "文章標題";
    request.Data.Properties.Description = "分享描述文字";
    request.Data.SetText("要分享的主要文字內容");
    request.Data.SetUri(new Uri("https://example.com/article"));
    request.Data.SetHtmlFormat(HtmlFormatHelper.CreateHtmlFormat("HTML 內容"));
    
    // 圖片
    var imageFile = await Package.Current.InstalledLocation.GetFileAsync("Assets/share.jpg");
    request.Data.SetBitmap(RandomAccessStreamReference.CreateFromFile(imageFile));
    
    // 縮圖
    request.Data.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(imageFile);
}

填充資料包程式碼 分享面板顯示效果

步驟 3:離頁時註銷事件

避免記憶體洩漏與重複觸發。

註銷事件程式碼

建構分享目標應用

步驟 1:清單檔宣告分享目標

在 Package.appxmanifest「宣告」添加「分享目標」,勾選支援格式(文字、URI、圖片等)。

清單檔分享目標宣告

步驟 2:處理啟動事件

在 App.xaml.cs 重寫 OnShareTargetActivated:

protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args) {
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(ShareTargetPage), args.ShareOperation);
    Window.Current.Content = rootFrame;
    Window.Current.Activate();
}

OnShareTargetActivated 實作

步驟 3:解析資料包

protected override void OnNavigatedTo(NavigationEventArgs e) {
    var shareOperation = e.Parameter as ShareOperation;
    if (shareOperation != null) {
        var data = shareOperation.Data;
        
        // 取得文字
        if (data.Contains(StandardDataFormats.Text)) {
            var text = await data.GetTextAsync();
            txtContent.Text = text;
        }
        
        // 取得圖片
        if (data.Contains(StandardDataFormats.Bitmap)) {
            var streamRef = await data.GetBitmapAsync();
            var stream = await streamRef.OpenReadAsync();
            var bitmap = new BitmapImage();
            await bitmap.SetSourceAsync(stream);
            imgShared.Source = bitmap;
        }
        
        // 取得 URI
        if (data.Contains(StandardDataFormats.Uri)) {
            var uri = await data.GetUriAsync();
            txtUri.Text = uri.AbsoluteUri;
        }
    }
}

解析資料包程式碼

快速連結機制

分享完成後回傳 QuickLink,下次分享面板優先顯示。

var quickLink = new QuickLink {
    Id = "shareToMyApp",
    Title = "分享到我的應用",
    SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Bitmap },
    Thumbnail = RandomAccessStreamReference.CreateFromUri(
        new Uri("ms-appx:///Assets/quicklink-icon.png"))
};
shareOperation.ReportCompleted(quickLink);

回傳 QuickLink 程式碼 快速連結顯示效果

識別快速連結進入

if (shareOperation.QuickLinkId == "shareToMyApp") {
    // 針對快速連結的特殊處理邏輯
}

DataTransferManager 核心 API

成員類型說明
DataRequested事件分享操作開始時觸發
TargetApplicationChosen事件目標應用被選擇時觸發
GetForCurrentView()靜態方法取得目前視圖的管理器實例
ShowShareUI()靜態方法程式化開啟分享面板

分享合約實作完成。下一章將介紹設定合約的原理與建構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved