zoukankan      html  css  js  c++  java
  • 背水一战 Windows 10 (96)

    [源码下载]


    背水一战 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
    [源码下载]

  • 相关阅读:
    Js获取或计算时间的相关操作
    SqlServer删除表中重复的记录并保留一条
    获取js文件后的参数
    谷歌浏览器官方下载地址
    ionic项目中实现发短信和打电话
    ui-router传递参数
    ng-options用法详解
    html5 localStorage(本地存储)
    cordova插件之Local Notification(本地通知)
    AngularJS $http service
  • 原文地址:https://www.cnblogs.com/webabcd/p/9185829.html
Copyright © 2011-2022 走看看