背水一战 Windows 10 (96) - 选取器: ContactPicker
2018-06-15 08:33
375 查看
背水一战 Windows 10 (96) - 选取器: ContactPicker
作者:webabcd
介绍
背水一战 Windows 10 之 选取器
- ContactPicker(联系人选取窗口)
- 通过 ContactPicker 选取联系人,并获取其完整信息
示例
1、演示如何通过 ContactPicker 选择一个或多个联系人
Picker/ContactPickerDemo.xaml
<Page x:Class="Windows10.Picker.ContactPickerDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.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="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnPickContact" Content="pick a contact" Click="btnPickContact_Click" Margin="5" /> <Button Name="btnPickContacts" Content="pick multiple contacts" Click="btnPickContacts_Click" Margin="5" /> </StackPanel> </Grid> </Page>
Picker/ContactPickerDemo.xaml.cs
/* 演示如何通过 ContactPicker 选择一个或多个联系人 * * ContactPicker - 联系人选择窗口(有好多 api 在 uwp 中废弃了) * DesiredFieldsWithContactFieldType - 需要获取的联系人的字段(可以添加 ContactFieldType 类型的枚举) * PickContactAsync() - 弹出联系人选取器(只能选取一个),返回 Contact 类型的对象 * PickContactsAsync() - 弹出联系人选取器(可以选取多个),返回 Contact 类型的对象 * * Contact - 联系人对象 * 有一堆属性,看文档吧 */ using System; using System.Collections.Generic; using Windows.ApplicationModel.Contacts; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace Windows10.Picker { public sealed partial class ContactPickerDemo : Page { public ContactPickerDemo() { this.InitializeComponent(); } private async void btnPickContact_Click(object sender, RoutedEventArgs e) { ContactPicker contactPicker = new ContactPicker(); // 指定需要选取的联系人的字段 contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email); contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber); // 启动联系人选取器,以选择一个联系人 Contact contact = await contactPicker.PickContactAsync(); if (contact != null) { lblMsg.Text += string.Format("name:{0}", contact.Name); lblMsg.Text += Environment.NewLine; foreach (ContactEmail email in contact.Emails) { lblMsg.Text += string.Format("email kind:{0}, email address:{1}", email.Kind, email.Address); lblMsg.Text += Environment.NewLine; } foreach (ContactPhone phone in contact.Phones) { lblMsg.Text += string.Format("phone kind:{0}, phone number:{1}, phone description:{2}", phone.Kind, phone.Number, phone.Description); lblMsg.Text += Environment.NewLine; } } else { lblMsg.Text += "取消了"; lblMsg.Text += Environment.NewLine; } } private async void btnPickContacts_Click(object sender, RoutedEventArgs e) { ContactPicker contactPicker = new ContactPicker(); // 指定需要选取的联系人的字段 contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email); contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber); // 启动联系人选取器,以选择多个联系人 IList<Contact> contacts = await contactPicker.PickContactsAsync(); if (contacts != null && contacts.Count > 0) { foreach (Contact contact in contacts) { lblMsg.Text += string.Format("name:{0}", contact.Name); lblMsg.Text += Environment.NewLine; foreach (ContactEmail email in contact.Emails) { lblMsg.Text += string.Format("email kind:{0}, email address:{1}", email.Kind, email.Address); lblMsg.Text += Environment.NewLine; } foreach (ContactPhone phone in contact.Phones) { lblMsg.Text += string.Format("phone kind:{0}, phone number:{1}, phone description:{2}", phone.Kind, phone.Number, phone.Description); lblMsg.Text += Environment.NewLine; } } } else { lblMsg.Text += "取消了"; lblMsg.Text += Environment.NewLine; } } } }
2、演示如何通过 ContactPicker 选取联系人,并获取其完整信息
Picker/ContactPicker2.xaml
<Page x:Class="Windows10.Picker.ContactPicker2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:Windows10.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="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Image Name="imgThumbnail" Width="100" Height="100" HorizontalAlignment="Left" Margin="5" /> <Button Name="btnPickContact" Content="pick a contact" Click="btnPickContact_Click" Margin="5" /> </StackPanel> </Grid> </Page>
Picker/ContactPicker2.xaml.cs
/* 演示如何通过 ContactPicker 选取联系人,并获取其完整信息 * * ContactPicker - 联系人选择窗口(有好多 api 在 uwp 中废弃了) * DesiredFieldsWithContactFieldType - 需要获取的联系人的字段(可以添加 ContactFieldType 类型的枚举) * PickContactAsync() - 弹出联系人选取器(只能选取一个),返回 Contact 类型的对象 * PickContactsAsync() - 弹出联系人选取器(可以选取多个),返回 Contact 类型的对象 * * Contact - 联系人对象 * 有一堆属性,看文档吧 * * * 注: * 1、通过 ContactPicker 选取的联系人,可以获取的信息有限,但是可以通过 ContactStore 获取联系人的完整信息 * 2、通过 ContactStore 是可以获取到全部联系人的完整信息的,这部分知识点以后再写 * 3、通过 ContactStore 获取数据的话,需要在 Package.appxmanifest 中配置 <Capability Name = "contacts" /> */ using System; using System.Collections.Generic; using Windows.ApplicationModel.Contacts; using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; namespace Windows10.Picker { public sealed partial class ContactPicker2 : Page { public ContactPicker2() { this.InitializeComponent(); } private async void btnPickContact_Click(object sender, RoutedEventArgs e) { ContactPicker contactPicker = new ContactPicker(); // 指定需要选取的联系人的字段 contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.Email); contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber); // 启动联系人选取器,以选择一个联系人 Contact contact = await contactPicker.PickContactAsync(); if (contact != null) { lblMsg.Text += string.Format("name:{0}", contact.Name); lblMsg.Text += Environment.NewLine; lblMsg.Text += string.Format("id:{0}", contact.Id); lblMsg.Text += Environment.NewLine; foreach (ContactEmail email in contact.Emails) { lblMsg.Text += string.Format("email kind:{0}, email address:{1}", email.Kind, email.Address); lblMsg.Text += Environment.NewLine; } foreach (ContactPhone phone in contact.Phones) { lblMsg.Text += string.Format("phone kind:{0}, phone number:{1}, phone description:{2}", phone.Kind, phone.Number, phone.Description); lblMsg.Text += Environment.NewLine; } ContactStore contactStore = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AllContactsReadOnly); // 通过 ContactStore 和联系人 id 可以获取到联系人的完整信息(需要配置 <Capability Name = "contacts" />) Contact realContact = await contactStore.GetContactAsync(contact.Id); // 通过 ContactStore 也是可以拿到全部联系人信息的,这部分知识点以后再写 // IReadOnlyList<Contact> contacts = await contactStore.FindContactsAsync(); // 显示联系人的图片(只通过 ContactPicker 是获取不到的) IRandomAccessStreamReference imageStreamRef = realContact.SmallDisplayPicture; if (imageStreamRef != null) { IRandomAccessStream imageStream = await imageStreamRef.OpenReadAsync(); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(imageStream); imgThumbnail.Source = bitmapImage; } } else { lblMsg.Text += "取消了"; lblMsg.Text += Environment.NewLine; } } } }
OK
[源码下载]
相关文章推荐
- 背水一战 Windows 10 (93) - 选取器: FileOpenPicker, FolderPicker, FileSavePicker
- 背水一战 Windows 10 (94) - 选取器: 自定义文件打开选取器
- 背水一战 Windows 10 (95) - 选取器: 自定义文件保存选取器
- 背水一战 Windows 10 (97) - 选取器: CachedFileUpdater
- 背水一战 Windows 10 (1) - C# 6.0 新特性
- 背水一战 Windows 10 (19) - 绑定: TemplateBinding 绑定, 与 RelativeSource 绑定, 与 StaticResource 绑定
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
- 背水一战 Windows 10 (115) - 后台任务: 通过 toast 激活后台任务, 定时激活后台任务
- 背水一战 Windows 10 (8) - 控件 UI: StateTrigger
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
- 背水一战 Windows 10 (32) - 控件(选择类): Selector, ComboBox
- 背水一战 Windows 10 (65) - 控件(WebView): 对 WebView 中的内容截图, 通过 Share Contract 分享 WebView 中的被选中的内容
- 背水一战 Windows 10 (4) - UI: 多窗口
- 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter
- 背水一战 Windows 10 (50) - 控件(集合类): ItemsControl - 基础知识, 数据绑定, ItemsPresenter, GridViewItemPresenter, ListViewItemPresenter
- 背水一战 Windows 10 (102) - 应用间通信: 剪切板
- 背水一战 Windows 10 (20) - 绑定: DataContextChanged, UpdateSourceTrigger, 对绑定的数据做自定义转换
- 背水一战 Windows 10 (116) - 后台任务: 前台程序激活后台任务
- 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例
- 背水一战 Windows 10 (21) - 绑定: x:Bind 绑定, x:Bind 绑定之 x:Phase, 使用绑定过程中的一些技巧