老周的部落格http://blog.csdn.net/tcjiaan,轉載請註明原作者和出處。
前面我們講了如何用檔案選取器選取檔案,其實,還有一個目錄選取器,不過,我先放著不說,因為它用起來和選取檔案是一個道理,大家不妨嘗試一下舉一反六。
今天,我們說一說如何從“人脈”中選取連絡人資訊,說白了,也和檔案選取的方法基本一樣,後面做執行個體演練的時候,大家會看到的。
在開始實踐之前,我們需要準備一些資料,即連絡人,如果沒有,你可以隨便加幾個來測試。
從可愛的“開始”螢幕中找到“人脈”應用,並啟動。
如果是第一次使用,會要求你輸入MS帳號擷取連絡人,我們就按提示操作,如果你沒有Live ID,就隨便申請一個唄。
驗證並登陸成功後,你就會看到你的好友們了。
如果你還沒有連絡人,調出工具條,點擊“建立”按鈕。
至於連絡人資訊,我們目前只是測試,所以,隨例填就行了,如所示。
填完後,點擊“儲存”,這樣就建立了連絡人記錄。為了方便測試,你可以多建N條記錄。
好了,有了資料,我們就可以動手練習了。
1、啟動美麗的VS2012,建立一個app應用。
2、開啟MainPage.xaml,介面這按下面的XAML布局即可,簡便易讀嘛。
<Page x:Class="myAppExample.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:myAppExample" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Margin="15,27,0,22"> <Button Content="選取連絡人" Click="onPick"/> </StackPanel> <ListView Grid.Row="1" Margin="25" x:Name="lvContacts" ScrollViewer.HorizontalScrollMode="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto"> <ListView.ItemsPanel> <ItemsPanelTemplate> <WrapGrid Orientation="Vertical" MaximumRowsOrColumns="5" ItemWidth="300" VerticalChildrenAlignment="Center"/> </ItemsPanelTemplate> </ListView.ItemsPanel> </ListView> </Grid></Page>
3、在XAML文檔中,找到Button的Click事件處理常式,從彈出的菜單中選擇“定位到事件處理常式”。
背景處理代碼,如下。
using System;using System.Collections.Generic;using System.IO;using System.Linq;using Windows.Foundation;using Windows.Foundation.Collections;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Controls.Primitives;using Windows.UI.Xaml.Data;using Windows.UI.Xaml.Input;using Windows.UI.Xaml.Media;using Windows.UI.Xaml.Navigation;using Windows.ApplicationModel.Contacts;using Windows.UI.Xaml.Documents;namespace myAppExample{ public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } private async void onPick(object sender, RoutedEventArgs e) { ContactPicker cpicker = new ContactPicker(); IReadOnlyList<ContactInformation> list = await cpicker.PickMultipleContactsAsync(); if (list == null) { return; } this.lvContacts.Items.Clear(); foreach (var item in list) { TextBlock tb = new TextBlock(); tb.TextWrapping = TextWrapping.Wrap; // 連絡人名字顯示為標題 Run runTitle = new Run(); runTitle.FontSize = 22d; runTitle.FontWeight = Windows.UI.Text.FontWeights.Bold; runTitle.Text = item.Name; // 將標題文本添加到TextBlock中 tb.Inlines.Add(runTitle); // 一個分行符號 tb.Inlines.Add(new LineBreak()); // 讀出連絡人的手機號碼列表 foreach (var ph in item.PhoneNumbers) { Run runNo = new Run(); runNo.Text = string.Format("{0}:{1}", ph.Name, ph.Value); tb.Inlines.Add(runNo); tb.Inlines.Add(new LineBreak()); } ListViewItem vitem = new ListViewItem(); // TextBlock作為ListViewItem的內容 vitem.Content = tb; this.lvContacts.Items.Add(vitem); } } }}
a、記得引入命名空間Windows.ApplicationModel.Contacts,我們用到的ContactPicker類就在該命名空間下;
b、通過調用PickMultipleContactsAsync方法,可以一次性選擇多位連絡人,它是一個非同步方法呼叫,記得加上等待關鍵字;
c、每一位連絡人的資訊,由一個ContactInformation執行個體表示,因為通過foreach迴圈可以取出所選擇的連絡人資訊,其中Name屬性工作表示不連絡人的名字,本例我們需要取得連絡人的手機號碼,因而我們訪問PhoneNumbers屬性,由於一位連絡人可能擁用N個手機號碼(比如工作用的,家庭用的,泡妞專用的),所以,無論是PhoneNumbers屬性也好,Emails屬性也罷,都是一個ContactField列表,而每個ContactField就代表一個欄位資訊,重要的屬性我們一般會讀取Name和Value,比如:
phoneno : 13521103823
email : abcd@126.com
Name就是phoneno,Value就是13521103823。
現在,我們可以運行應用程式了。