重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
生活随笔
收集整理的這篇文章主要介紹了
重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
原文:重新想象 Windows 8 Store Apps (27) - 選取器: 聯(lián)系人選取窗口, 自定義聯(lián)系人選取窗口
[源碼下載]
作者:webabcd
介紹
重新想象 Windows 8 Store Apps 之?選取器
- ContactPicker - 聯(lián)系人選取器
- ContactPickerUI - 自定義聯(lián)系人選取器
示例
演示如何通過(guò) ContactPicker 選擇一個(gè)或多個(gè)聯(lián)系人,以及如何開(kāi)發(fā)自定義聯(lián)系人選取器
1、 開(kāi)發(fā)一個(gè)自定義聯(lián)系人選取器
Picker/MyContactPicker.xaml
Picker/MyContactPicker.xaml.cs
/** 演示如何開(kāi)發(fā)自定義的聯(lián)系人選取器* * 1、在 Package.appxmanifest 中新增一個(gè)“聯(lián)系人選取器”聲明,并做相關(guān)配置* 2、在 App.xaml.cs 中 override void OnActivated(IActivatedEventArgs args),以獲取聯(lián)系人選取器的相關(guān)信息* * ContactPickerActivatedEventArgs - 通過(guò)“聯(lián)系人選取器”激活應(yīng)用程序時(shí)的事件參數(shù)* ContactPickerUI - 獲取 ContactPickerUI 對(duì)象* PreviousExecutionState, Kind, SplashScreen - 各種激活 app 的方式的事件參數(shù)基本上都有這些屬性,就不多說(shuō)了* * ContactPickerUI - 自定義聯(lián)系人選取器的幫助類(lèi)* SelectionMode - 獲取由 ContactPicker(調(diào)用者)設(shè)置的 SelectionMode 屬性* DesiredFields - 獲取由 ContactPicker(調(diào)用者)設(shè)置的 DesiredFields 屬性* AddContact(string id, Contact contact) - 選取一個(gè)聯(lián)系人* id - 聯(lián)系人標(biāo)識(shí)* contact - 一個(gè) Contact 對(duì)象* RemoveContact() - 刪除指定標(biāo)識(shí)的聯(lián)系人* ContainsContact() - 指定標(biāo)識(shí)的聯(lián)系人是否已被選取* ContactRemoved - 移除一個(gè)已被選取的聯(lián)系人時(shí)所觸發(fā)的事件* * Contact - 返回給調(diào)用者的聯(lián)系人對(duì)象* Name - 名稱(chēng)* Thumbnail - 縮略圖* Fields - 聯(lián)系人的字段數(shù)據(jù),每一條數(shù)據(jù)都是一個(gè)實(shí)現(xiàn)了 IContactField 接口的對(duì)象* * ContactField - 實(shí)現(xiàn)了 IContactField 接口,用于描述聯(lián)系人的某一個(gè)字段數(shù)據(jù)* Type - 字段類(lèi)型(ContactFieldType 枚舉)* Email, PhoneNumber, Location, InstantMessage, Custom* Category - 字段類(lèi)別(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 對(duì)象var contactPickerActivated = e.Parameter as ContactPickerActivatedEventArgs;_contactPickerUI = contactPickerActivated.ContactPickerUI;_contactPickerUI.ContactRemoved += _contactPickerUI_ContactRemoved; }protected override void OnNavigatedFrom(NavigationEventArgs e){_contactPickerUI.ContactRemoved -= _contactPickerUI_ContactRemoved;}// 從選取緩沖區(qū)移除后async void _contactPickerUI_ContactRemoved(ContactPickerUI sender, ContactRemovedEventArgs args){// 注意:無(wú)法直接得知 ContactPickerUI 是單選模式還是多選模式,需要判斷當(dāng)添加了一個(gè)聯(lián)系人后,再添加一個(gè)聯(lián)系人,如果系統(tǒng)會(huì)自動(dòng)移除前一個(gè)聯(lián)系人,則說(shuō)明是單選模式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();// 構(gòu)造一個(gè) Contact 對(duì)象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();// 向選取緩沖區(qū)新增一個(gè)聯(lián)系人switch (_contactPickerUI.AddContact(id, contact)){case AddContactResult.Added: // 已被成功添加lblMsg.Text += "added contact: " + id;lblMsg.Text += Environment.NewLine;break;case AddContactResult.AlreadyAdded: // 選取緩沖區(qū)已有此聯(lián)系人lblMsg.Text += "already added contact: " + id;lblMsg.Text += Environment.NewLine;break;case AddContactResult.Unavailable: // 無(wú)效聯(lián)系人lblMsg.Text += "unavailable contact: " + id;lblMsg.Text += Environment.NewLine;break;}}} }
2、判斷程序是否是由聯(lián)系人選取器激活,在 App.xaml.cs 中 override void OnActivated(IActivatedEventArgs args)
App.xaml.cs
3、通過(guò)聯(lián)系人選取器選擇聯(lián)系人。注:如果需要激活自定義的聯(lián)系人選取器,請(qǐng)?jiān)趶棾龅倪x取器窗口的左上角選擇對(duì)應(yīng) Provider
Picker/ContactPickerDemo.xaml
Picker/ContactPickerDemo.xaml.cs
/** 演示如何通過(guò) ContactPicker 選擇一個(gè)或多個(gè)聯(lián)系人* * ContactPicker - 聯(lián)系人選擇窗口* CommitButtonText - 聯(lián)系人選擇窗口的確定按鈕的顯示文本,此按鈕默認(rèn)顯示的文本為“確定”* SelectionMode - 選取模式(ContactSelectionMode 枚舉)* Contacts - 請(qǐng)對(duì)我提供聯(lián)系人的全部字段的數(shù)據(jù),默認(rèn)值* Fields - 請(qǐng)對(duì)我提供指定字段的數(shù)據(jù)* DesiredFields - 當(dāng) SelectionMode.Fields 時(shí),請(qǐng)對(duì)我提供指定字段的數(shù)據(jù),字段名稱(chēng)來(lái)自 KnownContactField 枚舉* PickSingleContactAsync() - 選取一個(gè)聯(lián)系人,返回 ContactInformation 對(duì)象* PickMultipleContactsAsync() - 選取多個(gè)聯(lián)系人,返回 ContactInformation 對(duì)象集合* * ContactInformation - 聯(lián)系人信息對(duì)象* Name, Emails, PhoneNumbers, Locations, InstantMessages, CustomFields* GetThumbnailAsync() - 獲取聯(lián)系人縮略圖*/using System; using System.Collections.Generic; using System.Linq; using Windows.ApplicationModel.Contacts; using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; using XamlDemo.Common;namespace XamlDemo.Picker {public sealed partial class ContactPickerDemo : Page{public ContactPickerDemo(){this.InitializeComponent();}private async void btnPickContact_Click(object sender, RoutedEventArgs e){if (Helper.EnsureUnsnapped()){ContactPicker contactPicker = new ContactPicker();contactPicker.CommitButtonText = "確定";contactPicker.SelectionMode = ContactSelectionMode.Contacts;// 啟動(dòng)聯(lián)系人選取器,以選擇一個(gè)聯(lián)系人ContactInformation contact = await contactPicker.PickSingleContactAsync();if (contact != null){lblMsg.Text = "name: " + contact.Name;lblMsg.Text += Environment.NewLine;lblMsg.Text += "emails: " + string.Join(",", contact.Emails.Select(p => new { email = p.Value }));lblMsg.Text += Environment.NewLine;lblMsg.Text += "phoneNumbers: " + string.Join(",", contact.PhoneNumbers.Select(p => new { phoneNumber = p.Value }));IRandomAccessStreamWithContentType stream = await contact.GetThumbnailAsync();if (stream != null && stream.Size > 0){BitmapImage bitmap = new BitmapImage();bitmap.SetSource(stream);imgThumbnail.Source = bitmap;}}else{lblMsg.Text = "取消了";}}}private async void btnPickContacts_Click(object sender, RoutedEventArgs e){if (Helper.EnsureUnsnapped()){var contactPicker = new ContactPicker();// 啟動(dòng)聯(lián)系人選取器,以選擇多個(gè)聯(lián)系人IReadOnlyList<ContactInformation> contacts = await contactPicker.PickMultipleContactsAsync();if (contacts != null && contacts.Count > 0){ContactInformation contact = contacts[0];lblMsg.Text = "contacts count: " + contacts.Count.ToString();lblMsg.Text += Environment.NewLine;lblMsg.Text += "first contact name: " + contact.Name;lblMsg.Text += Environment.NewLine;lblMsg.Text += "first contact emails: " + string.Join(",", contact.Emails.Select(p => new { email = p.Value }));lblMsg.Text += Environment.NewLine;lblMsg.Text += "first contact phoneNumbers: " + string.Join(",", contact.PhoneNumbers.Select(p => new { phoneNumber = p.Value }));IRandomAccessStreamWithContentType stream = await contact.GetThumbnailAsync();if (stream != null && stream.Size > 0){BitmapImage bitmap = new BitmapImage();bitmap.SetSource(stream);imgThumbnail.Source = bitmap;}}else{lblMsg.Text = "取消了";}}}} }
OK
[源碼下載]
總結(jié)
以上是生活随笔為你收集整理的重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java集合框架的实现
- 下一篇: hadoop--HDFS_机架感知与网络