程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Windows 8 Store Apps學習(39) 契約: Share Contract

Windows 8 Store Apps學習(39) 契約: Share Contract

編輯:關於.NET

介紹

重新想象 Windows 8 Store Apps 之 契約

Share Contract - 右側邊欄稱之為 Charm,其 中的“共享”稱之為 Share Contract

示例

1、演示如何開發共享源

Contracts/ShareContract/ShareSource.xaml

<Page
    x:Class="XamlDemo.Contracts.ShareContract.ShareSource"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Contracts.ShareContract"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="Transparent">
        <StackPanel Margin="120 0 0 0">
    
            <TextBlock Name="lblMsg" FontSize="14.667" />
    
            <Button Content="Share Text" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share Link" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share Image" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share File" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share Html" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share Custom Data" Click="Button_Click_1" Margin="0 10 0 0" />
    
            <Button Content="Share With Deferral" Click="Button_Click_1" Margin="0 10 0 0" />
    
        </StackPanel>
    </Grid>
</Page>

Contracts/ShareContract/ShareSource.xaml.cs

/*
 * Share Contract - 右側邊欄稱之為 Charm,其中的“共享”稱之為 Share Contract
 * 
 * 本例演示如何開發共享源
 * 共享源 - 提供共享數據的 app
 * 共享目標 - 接收並處理共享數據的 app
 * 共享面板 - 點擊“共享”後出來的,包含了一堆共享目標的面板
 * 
 * DataTransferManager - 共享數據管理器
 *     GetForCurrentView() - 返回當前窗口關聯的 DataTransferManager 對象
 *     ShowShareUI() -  彈出共享面板,以開始共享操作
 *     DataRequested - 共享操作開始時(即彈出共享面板後)所觸發的事件,事件參數為 DataTransferManager 和 DataRequestedEventArgs
 *     TargetApplicationChosen - 選中了共享面板上的某個共享目標時所觸發的事件,事件參數為 DataTransferManager 和 TargetApplicationChosenEventArgs
 * 
 * TargetApplicationChosenEventArgs - TargetApplicationChosen 的事件參數
 *     ApplicationName - 選中的共享目標的名稱
 *     
 * DataRequestedEventArgs - DataRequested 的事件參數
 *     Request - 返回 DataRequest 類型的數據
 *     
 * DataRequest - 一個對象,其包括了共享的內容和錯誤提示
 *     FailWithDisplayText() - 指定當共享操作失敗時,需要在共享面板上顯示的提示信息
 *     Data - 需要共享的內容,返回 DataPackage 對象
 *         
 * DataPackage - 共享內容(注:復制到剪切板的內容也是通過此對象來封裝)
 *     Properties - 返回 DataPackagePropertySetView 對象
 *         Properties.Title - 共享數據的標題
 *         Properties.Description - 共享數據的描述
 *         Properties.Thumbnail - 共享數據的縮略圖
 *         Properties.FileTypes - 獲取共享數據中包含的文件類型
 *     SetText(), SetUri(), SetHtmlFormat(), SetRtf(), SetBitmap(), SetStorageItems(), SetData(), SetDataProvider() - 設置需要共享的各種格式的數據,詳細用法見下面的相關 demo(注:一個 

DataPackage 可以有多種不同格式的數據)
 *     ResourceMap - IDictionary<string, RandomAccessStreamReference> 類型,共享 html 時如果其中包含了本地資源的引用(如引用了本地圖片),則需要通過 ResourceMap 傳遞
 *     GetView() - 返回 DataPackageView 對象,其相當於 DataPackage 的一個只讀副本,詳細說明見 ShareTarget.xaml.cs
 *     另:WebView.DataTransferPackage 會返回用戶選中的內容的 DataPackage 對象,以便分享浏覽器內的 html 內容
 *     
 * 異步共享:
 * 1、DataPackage 通過 SetDataProvider() 傳遞數據,其對應的委托的參數為一個 DataProviderRequest 類型的數據
 * 2、DataProviderRequest.GetDeferral() 用於獲取 DataProviderDeferral 對象以開始異步處理,然後通過 DataProviderDeferral.Complete() 通知 DataPackage 已經完成了異步操作
 */
    
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.ApplicationModel.DataTransfer;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
using System.Linq;
using Windows.Graphics.Imaging;
    
namespace XamlDemo.Contracts.ShareContract
{
    public sealed partial class ShareSource : Page
    {
        // 當前需要分享的內容的類型
        private string _shareType = "Share Text";
        // 需要分享的文件集合
        private IReadOnlyList<StorageFile> _selectedFiles;
    
        public ShareSource()
        {
            this.InitializeComponent();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 初始化 DataTransferManager
            DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
            dataTransferManager.DataRequested += dataTransferManager_DataRequested;
            dataTransferManager.TargetApplicationChosen += dataTransferManager_TargetApplicationChosen;
        }
    
        void dataTransferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
        {
            // 共享操作開始時(即彈出共享面板後),根據需要分享的內容的類型執行指定的方法
            switch (_shareType)
            {
                case "Share Text":
                    ShareText(sender, args);
                    break;
                case "Share Link":
                    ShareLink(sender, args);
                    break;
                case "Share Image":
                    ShareImage(sender, args);
                    break;
                case "Share File":
                    ShareFile(sender, args);
                    break;
                case "Share With Deferral":
                    ShareWithDeferral(sender, args);
                    break;
                case "Share Html":
                    ShareHtml(sender, args);
                    break;
                case "Share Custom Data":
                    ShareCustomData(sender, args);
                    break;
                default:
                    break;
            }
    
            // 共享操作失敗時,在共享面板上顯示的提示信息
            // args.Request.FailWithDisplayText("共享操作失敗"); 
        }
    
        void dataTransferManager_TargetApplicationChosen(DataTransferManager sender, TargetApplicationChosenEventArgs args)
        {
            // 顯示用戶需要與其共享內容的應用程序的名稱
            lblMsg.Text = "共享給:" + args.ApplicationName;
        }
    
        private async void Button_Click_1(object sender, RoutedEventArgs e)
        {
            _shareType = (sender as Button).Content.ToString();
    
            // 如果需要共享文件,則提示用戶選擇文件
            if (_shareType == "Share Image" || _shareType == "Share File" || _shareType == "Share With Deferral")
            {
                bool unsnapped = ((ApplicationView.Value != ApplicationViewState.Snapped) || ApplicationView.TryUnsnap());
                if (unsnapped)
                {
                    FileOpenPicker filePicker = new FileOpenPicker
                    {
                        ViewMode = PickerViewMode.List,
                        SuggestedStartLocation = PickerLocationId.PicturesLibrary,
                        FileTypeFilter = { "*" }
                        // FileTypeFilter = { ".jpg", ".png", ".bmp", ".gif", ".tif" }
                    };
    
                    _selectedFiles = await filePicker.PickMultipleFilesAsync();
                    if (_selectedFiles.Count > 0)
                    {
                        // 彈出共享面板,以開始共享操作
                        DataTransferManager.ShowShareUI();
                    }
                }
            }
            else
            {
                // 彈出共享面板,以開始共享操作
                DataTransferManager.ShowShareUI();
            }
        }
    
        // 共享文本的 Demo
        private void ShareText(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
            dataPackage.SetText("需要分享的詳細內容");
        }
    
        // 共享超鏈的 Demo
        private void ShareLink(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
            dataPackage.SetUri(new Uri("http://webabcd.cnblogs.com"));
        }
    
        // 共享圖片的 Demo(關於如何為分享的圖片減肥請參見本例的“異步共享的 Demo”)
        private void ShareImage(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
    
            // 分享選中的所有文件中的第一個文件(假設其是圖片)
            RandomAccessStreamReference imageStreamRef = RandomAccessStreamReference.CreateFromFile(_selectedFiles.First());
            dataPackage.Properties.Thumbnail = imageStreamRef;
            dataPackage.SetBitmap(imageStreamRef);
        }
    
        // 共享文件的 Demo
        private void ShareFile(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
            dataPackage.SetStorageItems(_selectedFiles);
        }
    
        // 共享 html 的 Demo
        private void ShareHtml(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            string localImage = "ms-appx:///Assets/Logo.png";
            string htmlExample = "<p><b>webabcd</b><img src=\"" + localImage + "\" /></p>";
            // 為 html 添加共享所需的必要的標頭,以保證可以正常進行 html 的共享操作
            string htmlFormat = HtmlFormatHelper.CreateHtmlFormat(htmlExample);
    
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
            dataPackage.SetHtmlFormat(htmlFormat);
    
            // 設置本地圖像數據(如果需要共享的 html 包含本地圖像,則只能通過這種方法共享之)
            RandomAccessStreamReference streamRef = RandomAccessStreamReference.CreateFromUri(new Uri(localImage));
            dataPackage.ResourceMap[localImage] = streamRef;
    
            /*
             * 以下演示如何共享 WebView 中的被用戶選中的 html
             * 具體可參見:Controls/WebView/Share.xaml
             * 
            DataPackage dataPackage = WebView.DataTransferPackage;
            DataPackageView dataPackageView = dataPackage.GetView();
    
            if ((dataPackageView != null) && (dataPackageView.AvailableFormats.Count > 0))
            {
                dataPackage.Properties.Title = "Title";
                dataPackage.Properties.Description = "Description";
                
                args.Request.Data = dataPackage;
            }
            */
        }
    
        // 共享自定義數據的 Demo
        private void ShareCustomData(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
    
            // 指定需要分享的自定義數據,第一個參數是自定義數據的格式 id(注:標准格式 id 在 Windows.ApplicationModel.DataTransfer.StandardDataFormats 枚舉)
            // 要讓自定義數據可以正常分享,需要在 Package.appxmanifest 中的“共享目標”聲明中對自定義格式 id 做相應的配置,以及在 SourceTarget 對自定義格式 id 做相應的處理
            dataPackage.SetData("http://webabcd/sharedemo", "自定義數據");
        }
    
        // 異步共享的 Demo(在共享內容需要較長時間才能計算出來的場景下,應該使用異步共享)
        private void ShareWithDeferral(DataTransferManager dtm, DataRequestedEventArgs args)
        {
            DataPackage dataPackage = args.Request.Data;
            dataPackage.Properties.Title = "Title";
            dataPackage.Properties.Description = "Description";
    
            dataPackage.Properties.Thumbnail = RandomAccessStreamReference.CreateFromFile(_selectedFiles.First());
            // 通過委托來提供共享數據,當用戶點擊了共享目標後會調用此委托,即不馬上提供共享數據,而是等到用戶點擊了共享目標後再異步准備數據
            dataPackage.SetDataProvider(StandardDataFormats.Bitmap, providerRequest => this.OnDeferredImageRequestedHandler(providerRequest, _selectedFiles.First()));
        }
    
        // 用戶點擊了共享目標後會調用此方法
        private async void OnDeferredImageRequestedHandler(DataProviderRequest providerRequest, StorageFile imageFile)
        {
            // 獲取 DataProviderDeferral,以開始異步處理,即在此之後允許調用 await 方法
            DataProviderDeferral deferral = providerRequest.GetDeferral();
            InMemoryRandomAccessStream inMemoryStream = new InMemoryRandomAccessStream();
    
            try
            {
                // 將用戶選中的圖片縮小一倍,然後再共享
                IRandomAccessStream imageStream = await imageFile.OpenAsync(FileAccessMode.Read);
                BitmapDecoder imageDecoder = await BitmapDecoder.CreateAsync(imageStream);
                BitmapEncoder imageEncoder = await BitmapEncoder.CreateForTranscodingAsync(inMemoryStream, imageDecoder);
                imageEncoder.BitmapTransform.ScaledWidth = (uint)(imageDecoder.OrientedPixelWidth * 0.5);
                imageEncoder.BitmapTransform.ScaledHeight = (uint)(imageDecoder.OrientedPixelHeight * 0.5);
                await imageEncoder.FlushAsync();
    
                // 停 3 秒,以模擬長時間任務
                await Task.Delay(3000);
    
                providerRequest.SetData(RandomAccessStreamReference.CreateFromStream(inMemoryStream));
            }
            finally
            {
                // 通知 DataPackage 已經完成了共享數據的准備
                deferral.Complete();
            }
        }
    }
}

2、演示如何開發共享目標

Contracts/ShareContract/ShareTarget.xaml

<Page
    x:Class="XamlDemo.Contracts.ShareContract.ShareTarget"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:XamlDemo.Contracts.ShareContract"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    
    <Grid Background="#438bdf">
    
        <ScrollViewer Name="scrollView" Margin="120 0 0 0">
            <StackPanel>
                <TextBlock Name="lblMsg" FontSize="14.667" />
    
                <Image Name="imgThumbnail" Margin="0 10 0 0" />
    
                <Image Name="imgBitmap" Margin="0 10 0 0" />
                    
                <Button Content="新增一個 QuickLink,並完成共享操作" Click="Button_Click_1" Margin="0 10 0 0" />
            </StackPanel>
        </ScrollViewer>
            
    </Grid>
</Page>

Contracts/ShareContract/ShareTarget.xaml.cs

/*
 * Share Contract - 右側邊欄稱之為 Charm,其中的“共享”稱之為 Share Contract
 * 
 * 本例演示如何開發共享目標
 * 1、在 Package.appxmanifest 中新增一個“共享目標”聲明,並做相關配置
 * 2、在 App.xaml.cs 中 override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)

,以獲取相關的共享信息
 * 
 * ShareTargetActivatedEventArgs - 當 app 由共享激活時的事件參數
 *     ShareOperation - 返回一個 ShareOperation 類型的對象
 *     PreviousExecutionState - 此 app 被共享激活前的執行狀態(ApplicationExecutionState 枚舉:NotRunning, Running, Suspended, Terminated, ClosedByUser)
 *     SplashScreen - 啟動畫面對象
 * 
 * ShareOperation - 共享操作的相關信息
 *     Data - 返回 DataPackageView 對象,其相當於 DataPackage 的一個只讀副本
 *     QuickLinkId - 如果是 QuickLink 激活的,此屬性可獲取此 QuickLink 的 Id
 *     RemoveThisQuickLink() - 如果是 QuickLink 激活的,此方法可刪除此 QuickLink
 *     ReportCompleted() - 通知系統共享操作已經完成(會自動關閉共享面板),需要的話可以指定一個需要增加的 QuickLink 對象
 *     ReportStarted(), ReportDataRetrieved(), ReportError(), ReportSubmittedBackgroundTask() - 顧名思義的一些方法,用不用皆可,它們的作用是可以幫助系統優化資源的使用
 * 
 * DataPackage 對象的只讀版本,從剪切板獲取數據或者共享目標接收數據均通過此對象來獲取 DataPackage 對象的數據
 *     AvailableFormats - DataPackage 中數據所包含的所有格式
 *     Contains() - 是否包含指定格式的數據
 *     Properties - 返回 DataPackagePropertySetView 對象,就是由共享源所設置的一些信息,參見 ShareSource.xaml.cs
 *     GetTextAsync(), GetUriAsync(), GetRtfAsync(), GetHtmlFormatAsync(), GetBitmapAsync(), 

GetStorageItemsAsync(), GetDataAsync(), GetResourceMapAsync() - 獲取共享過來的各種格式的數據,詳

細用法見下面的相關 demo(注:一個 DataPackage 可以有多種不同格式的數據)
 *     
 * QuickLink - 預定義了一些數據,指向相應共享目標的一個快捷方式,其會出現在共享面板的上部
 *     Id - 預定義數據
 *     Title - QuickLink 出現在共享面板上的時候所顯示的名稱
 *     Thumbnail - QuickLink 出現在共享面板上的時候所顯示的圖標
 *     SupportedDataFormats - 共享數據中所包含的數據格式與 SupportedDataFormats 定義的相匹配(兩個集合中的元素有一個匹配即可),QuickLink 才會出現在共享面板上
 *     SupportedFileTypes - 共享數據中所包含的文件的擴展名與 SupportedDataFormats 定義的相匹配(兩個集合中的元素有一個匹配即可),QuickLink 才會出現在共享面板上
 *     
 * QuickLink 的適用場景舉例
 * 1、當用戶總是共享信息到某一個郵件地址時,便可以此郵件地址為 QuickLinkId 生成一個 QuickLink
 * 2、下回用戶再想共享信息到此郵件地址時,就可點此 QuickLink 來啟動共享操作
 * 3、共享目標被 QuickLink 激活後便可以解析 QuickLink 中的 Id,即用戶需要共享到的郵件地址,從而避免用戶輸入此郵件地址,從而方便用戶的共享操作
 */
    
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.DataTransfer;
using Windows.ApplicationModel.DataTransfer.ShareTarget;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.UI.Core;
using Windows.UI.Popups;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
using Windows.UI.Xaml.Navigation;
    
namespace XamlDemo.Contracts.ShareContract
{
    public sealed partial class ShareTarget : Page
    {
        private ShareOperation _shareOperation;
    
        public ShareTarget()
        {
            this.InitializeComponent();
        }
    
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            // 獲取 ShareOperation 對象
            ShareTargetActivatedEventArgs shareTargetActivated = (ShareTargetActivatedEventArgs)e.Parameter;
            if (shareTargetActivated == null)
            {
                lblMsg.Text = "為了演示共享目標,請從共享源激活本頁面";
                return;
            }
            _shareOperation = shareTargetActivated.ShareOperation;
    
            // 異步獲取共享數據
            await Task.Factory.StartNew(async () =>
            {
                // 顯示共享數據中相關信息
                OutputMessage("QuickLinkId: " + _shareOperation.QuickLinkId);
                OutputMessage("Title: " + _shareOperation.Data.Properties.Title);
                OutputMessage("Description: " + _shareOperation.Data.Properties.Description);
                ShowThumbnail(_shareOperation.Data.Properties.Thumbnail);
    
                // 如果共享數據中包含 Text 格式數據,則顯示之
                if (_shareOperation.Data.Contains(StandardDataFormats.Text))
                {
                    try
                    {
                        var text = await _shareOperation.Data.GetTextAsync();
                        OutputMessage("Text: " + text);
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
                // 如果共享數據中包含 Uri 格式數據,則顯示之
                if (_shareOperation.Data.Contains(StandardDataFormats.Uri))
                {
                    try
                    {
                        var uri = await _shareOperation.Data.GetUriAsync();
                        OutputMessage("Uri: " + uri.AbsoluteUri);
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
                // 如果共享數據中包含 Bitmap 格式數據,則顯示之
                if (_shareOperation.Data.Contains(StandardDataFormats.Bitmap))
                {
                    try
                    {
                        IRandomAccessStreamReference stream = await _shareOperation.Data.GetBitmapAsync();
                        ShowBitmap(stream);
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
                // 如果共享數據中包含 Html 格式數據,則顯示之
                if (_shareOperation.Data.Contains(StandardDataFormats.Html))
                {
                    try
                    {
                        // 獲取 html 數據
                        var html = await _shareOperation.Data.GetHtmlFormatAsync();
                        OutputMessage("Html: " + html);
    
                        // 獲取 html 中包含的本地資源的引用(如引用的本地圖片等),其數據在分享源的 DataPackage.ResourceMap 中設置
                        IReadOnlyDictionary<string, RandomAccessStreamReference> 

sharedResourceMap = await _shareOperation.Data.GetResourceMapAsync();
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
                // 如果共享數據中包含 StorageItems 格式數據,則顯示之
                if (_shareOperation.Data.Contains(StandardDataFormats.StorageItems))
                {
                    try
                    {
                        var storageItems = await _shareOperation.Data.GetStorageItemsAsync();
                        foreach (var storageItem in storageItems)
                        {
                            OutputMessage("storageItem: " + storageItem.Path);
                        }
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
                // 如果共享數據中包含“http://webabcd/sharedemo”格式數據,則顯示之
                if (_shareOperation.Data.Contains("http://webabcd/sharedemo"))
                {
                    try
                    {
                        var customData = await _shareOperation.Data.GetTextAsync("http://webabcd/sharedemo");
                        OutputMessage("Custom Data: " + customData);
                    }
                    catch (Exception ex)
                    {
                        OutputMessage(ex.ToString());
                    }
                }
            });
        }
    
        // 在 UI 上輸出指定的信息
        async private void OutputMessage(string message)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                lblMsg.Text += message;
                lblMsg.Text += Environment.NewLine;
            });
        }
    
        // 顯示圖片
        async private void ShowThumbnail(IRandomAccessStreamReference thumbnail)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
            {
                if (thumbnail != null)
                {
                    IRandomAccessStreamWithContentType thumbnailStream = await thumbnail.OpenReadAsync();
                    BitmapImage bitmapImage = new BitmapImage();
                    bitmapImage.SetSource(thumbnailStream);
    
                    imgThumbnail.Source = bitmapImage;
                }
            });
        }
    
        // 顯示圖片
        async private void ShowBitmap(IRandomAccessStreamReference bitmap)
        {
            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
            {
                if (bitmap != null)
                {
                    IRandomAccessStreamWithContentType bitmapStream = await bitmap.OpenReadAsync();
                    BitmapImage bitmapImage = new BitmapImage();
                    bitmapImage.SetSource(bitmapStream);
    
                    imgBitmap.Source = bitmapImage;
                }
            });
        }
    
        // 演示如何增加一個 QuickLink
        private async void Button_Click_1(object sender, Windows.UI.Xaml.RoutedEventArgs e)
        {
            QuickLink quickLink = new QuickLink
            {
                Id = "我是預定義數據,避免用戶再次輸入",
                Title = "QuickLink Title",
    
                SupportedFileTypes = { "*" },
                SupportedDataFormats =
                {
                    StandardDataFormats.Text,
                    StandardDataFormats.Uri,
                    StandardDataFormats.Bitmap,
                    StandardDataFormats.StorageItems,
                    StandardDataFormats.Html,
                    "http://webabcd/sharedemo"
                }
            };
    
            try
            {
                // 設置 QuickLink 的圖標
                StorageFile iconFile = await Package.Current.InstalledLocation.CreateFileAsync("Assets\\Logo.png", CreationCollisionOption.OpenIfExists);
                quickLink.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    
                // 完成共享操作,同時增加一個指定的 QuickLink
                _shareOperation.ReportCompleted(quickLink);
            }
            catch (Exception ex)
            {
                OutputMessage(ex.ToString());
            }
        }
    }
}

3、通過共享激活應用程序

App.xaml.cs

// 通過共享激活應用程序時所調用的方法
protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    var rootFrame = new Frame();
    rootFrame.Navigate(typeof(MainPage), args);
    Window.Current.Content = rootFrame;
    
    Window.Current.Activate();
}

OK

[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved