Windows 8 Store Apps學習(27) 選取器: 連絡人選取視窗

來源:互聯網
上載者:User

選取器: 連絡人選取視窗, 自訂連絡人選取視窗

介紹

重新想象 Windows 8 Store Apps 之 選取器

ContactPicker - 連絡人選取器

ContactPickerUI - 自訂連絡人選取器

樣本

示範如何通過 ContactPicker 選擇一個或多個連絡人 ,以及如何開發自訂連絡人選取器

1、 開發一個自訂連絡人選取器

Picker/MyContactPicker.xaml

<Page    x:Class="XamlDemo.Picker.MyContactPicker"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:local="using:XamlDemo.Picker"    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 Name="btnAddContract" Content="增加一個連絡人" Click="btnAddContract_Click" Margin="0 10 0 0" />            </StackPanel>    </Grid></Page>

Picker/MyContactPicker.xaml.cs

/* * 示範如何開發自訂的連絡人選取器 *  * 1、在 Package.appxmanifest 中新增一個“連絡人選取器”聲明,並做相關配置 * 2、在 App.xaml.cs 中 override void OnActivated(IActivatedEventArgs args),以擷取連絡人選取器的相關資訊 *  * ContactPickerActivatedEventArgs - 通過“連絡人選取器”啟用應用程式時的事件參數 *     ContactPickerUI - 擷取 ContactPickerUI 對象 *     PreviousExecutionState, Kind, SplashScreen - 各種啟用 app 的方式的事件參數基本上都有這些屬性,就不多說了 *  * ContactPickerUI - 自訂連絡人選取器的協助類 *     SelectionMode - 擷取由 ContactPicker(調用者)設定的 SelectionMode 屬性 *     DesiredFields - 擷取由 ContactPicker(調用者)設定的 DesiredFields 屬性 *     AddContact(string id, Contact contact) - 選取一個連絡人 *         id - 連絡人標識 *         contact - 一個 Contact 對象 *     RemoveContact() - 刪除指定標識的連絡人 *     ContainsContact() - 指定標識的連絡人是否已被選取 *     ContactRemoved - 移除一個已被選取的連絡人時所觸發的事件 *      * Contact - 返回給調用者的連絡人對象 *     Name - 名稱 *     Thumbnail - 縮圖 *     Fields - 連絡人的欄位資料,每一條資料都是一個實現了 IContactField 介面的對象 *      * ContactField - 實現了 IContactField 介面,用於描述連絡人的某一個欄位資料 *     Type - 欄位類型(ContactFieldType 枚舉) *         Email, PhoneNumber, Location, InstantMessage, Custom *     Category - 欄位類別(ContactFieldCategory 枚舉) *         None, Home, Work, Mobile, Other *     Value - 欄位的值 */    using System;using Windows.ApplicationModel.Activation;using Windows.ApplicationModel.Contacts.Provider;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Navigation;using Windows.ApplicationModel.Contacts;using Windows.Storage.Streams;using Windows.UI.Core;    namespace XamlDemo.Picker{    public sealed partial class MyContactPicker : Page    {        private ContactPickerUI _contactPickerUI;            public MyContactPicker()        {            this.InitializeComponent();        }            protected override void OnNavigatedTo(NavigationEventArgs e)        {            // 擷取 ContactPickerUI 對象            var contactPickerActivated = e.Parameter as ContactPickerActivatedEventArgs;            _contactPickerUI = contactPickerActivated.ContactPickerUI;                _contactPickerUI.ContactRemoved += _contactPickerUI_ContactRemoved;           }            protected override void OnNavigatedFrom(NavigationEventArgs e)        {            _contactPickerUI.ContactRemoved -= _contactPickerUI_ContactRemoved;        }            // 從選取緩衝區移除後        async void _contactPickerUI_ContactRemoved(ContactPickerUI sender, ContactRemovedEventArgs args)        {            // 注意:無法直接得知 ContactPickerUI 是單選模式還是多選模式,需要判斷當添加了一個連絡人後,再添加一個連絡人,如果系統會自動移除前一個連絡人,則說明是單選模式            await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>            {                lblMsg.Text += "removed contact: " + args.Id;                lblMsg.Text += Environment.NewLine;            });        }            private void btnAddContract_Click(object sender, RoutedEventArgs e)        {            Random random = new Random();                // 構造一個 Contact 對象            Contact contact = new Contact();            contact.Name = "webabcd " + random.Next(1000, 10000).ToString();            contact.Fields.Add(new ContactField(random.Next(1000, 10000).ToString(), ContactFieldType.Email, ContactFieldCategory.Home));            contact.Fields.Add(new ContactField(random.Next(1000, 10000).ToString(), ContactFieldType.Email, ContactFieldCategory.Work));            contact.Fields.Add(new ContactField(random.Next(1000, 10000).ToString(), ContactFieldType.PhoneNumber, ContactFieldCategory.Home));            contact.Fields.Add(new ContactField(random.Next(1000, 10000).ToString(), ContactFieldType.PhoneNumber, ContactFieldCategory.Work));            contact.Thumbnail = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Logo.png", UriKind.Absolute));                string id = Guid.NewGuid().ToString();                // 向選取緩衝區新增一個連絡人            switch (_contactPickerUI.AddContact(id, contact))            {                case AddContactResult.Added: // 已被成功添加                    lblMsg.Text += "added contact: " + id;                    lblMsg.Text += Environment.NewLine;                    break;                case AddContactResult.AlreadyAdded: // 選取緩衝區已有此連絡人                    lblMsg.Text += "already added contact: " + id;                    lblMsg.Text += Environment.NewLine;                    break;                case AddContactResult.Unavailable: // 無效連絡人                    lblMsg.Text += "unavailable contact: " + id;                    lblMsg.Text += Environment.NewLine;                    break;            }        }    }}

2、判斷程式是否是由連絡人選取器啟用,在 App.xaml.cs 中 override void OnActivated (IActivatedEventArgs args)
App.xaml.cs

protected override void OnActivated(IActivatedEventArgs args){    // 通過連絡人選取器啟用應用程式時    if (args.Kind == ActivationKind.ContactPicker)    {        ContactPickerActivatedEventArgs contactPickerArgs = args as ContactPickerActivatedEventArgs;            Frame rootFrame = new Frame();        rootFrame.Navigate(typeof(MainPage), contactPickerArgs);        Window.Current.Content = rootFrame;            Window.Current.Activate();    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.