[源碼下載]
html
做者:webabcd
介紹
不同凡響 windows phone 8.0 之 聯繫人和日曆html5
示例
一、演示如何操做自定義聯繫人存儲(自定義聯繫人的增刪改查)
ContactsAndCalendar/CustomContacts.xamlweb
<phone:PhoneApplicationPage x:Class="Demo.ContactsAndCalendar.CustomContacts" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <Grid Background="Transparent"> <StackPanel Orientation="Vertical"> <TextBlock x:Name="lblMsg" /> <Button x:Name="btnAdd" Content="添加聯繫人" Click="btnAdd_Click" /> <Button x:Name="btnUpdate" Content="更新聯繫人" Click="btnUpdate_Click" /> <Button x:Name="btnDelete" Content="刪除聯繫人" Click="btnDelete_Click" /> <Button x:Name="btnQuery" Content="查詢聯繫人" Click="btnQuery_Click" /> </StackPanel> </Grid> </phone:PhoneApplicationPage>
ContactsAndCalendar/CustomContacts.xaml.csshell
/* * 演示如何操做自定義聯繫人存儲(自定義聯繫人的增刪改查) * * * ContactStore - 自定義聯繫人存儲 * CreateOrOpenAsync(ContactStoreSystemAccessMode access, ContactStoreApplicationAccessMode sharing) - 建立或打開本 app 的自定義聯繫人存儲 * ContactStoreSystemAccessMode - 操做系統對本 app 的自定義聯繫人存儲的訪問模式 * ReadOnly - 只能讀 * ReadWrite - 除了讀外,還能夠修改 * ContactStoreApplicationAccessMode - 其餘 app 對本 app 的自定義聯繫人存儲的訪問模式 * LimitedReadOnly - 只能讀聯繫人的說明和顯示圖片 * ReadOnly - 能夠讀任何屬性 * FindContactByIdAsync(), FindContactByRemoteIdAsync - 根據 Id 或 RemoteId 查找指定的聯繫人,返回 StoredContact 類型的對象 * DeleteContactAsync(), DeleteAsync() - 根據 Id 刪除聯繫人,或者刪除所有聯繫人 * CreateContactQuery(ContactQueryOptions options) - 建立一個聯繫人查詢,返回 ContactQueryResult 類型的對象 * ContactQueryOptions - 查詢參數 * DesiredFields - 須要返回的屬性列表 * OrderBy - 排序字段(ContactQueryResultOrdering 枚舉) * SystemDefault - 默認排序 * GivenNameFamilyName - 先按名排序,再按姓排序 * FamilyNameGivenName - 先按姓排序,再按名排序 * RevisionNumber - ContactStore 的修訂號,只讀 * GetChangesAsync(ulong baseRevisionNumber) - 返回與指定修訂號關聯的每次更改的 ContactChangeRecord 對象 * LoadExtendedPropertiesAsync() - 獲取 ContactStore 的擴展屬性集合 * SaveExtendedPropertiesAsync() - 保存 ContactStore 的擴展屬性集合 * * StoredContact - 聯繫人對象 * FamilyName - 姓 * GivenName - 名 * HonorificPrefix - 前綴尊稱 * HonorificSuffix - 後綴尊稱 * DisplayName - 顯示名稱 * DisplayPicture - 顯示圖片 * Id - 聯繫人的本地標識(只讀) * RemoteId - 聯繫人的遠程標識,應確保其在手機上的全部應用中都是惟一的 * Store - 對應的 ContactStore 對象 * KnownContactProperties() - 異步方式獲取顯示圖片 * SetDisplayPictureAsync() - 異步方式設置顯示圖片 * GetPropertiesAsync() - 獲取已知屬性(key 的值爲 Windows.Phone.PersonalInformation.KnownContactProperties 類中的字段) * GetExtendedPropertiesAsync() - 獲取擴展屬性(key 的值任意) * SaveAsync() - 保存當前聯繫人信息 * ReplaceExistingContactAsync(string id) - 使用當前聯繫人替換指定 Id 的聯繫人 * * ContactQueryResult - 聯繫人查詢結果對象 * GetContactsAsync() - 獲取所有聯繫人 * GetContactsAsync(uint startIndex, uint maxNumberOfItems) - 獲取指定範圍的聯繫人 * GetContactCountAsync() - 獲取當前查詢的聯繫人總數 * GetCurrentQueryOptions() - 獲取對應的 ContactQueryOptions,參見 CreateContactQuery(ContactQueryOptions options) * * * 注: * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_CONTACTS" /> * 二、Id 表明聯繫人的本地標識(只讀) * 三、RemoteId 表明聯繫人的遠程標識,應確保其在手機上的全部應用中都是惟一的 */ using System; using System.Collections.Generic; using System.Windows; using Microsoft.Phone.Controls; using Windows.Phone.PersonalInformation; namespace Demo.ContactsAndCalendar { public partial class CustomContacts : PhoneApplicationPage { private Random _random = new Random(); public CustomContacts() { InitializeComponent(); } // 添加聯繫人 private async void btnAdd_Click(object sender, RoutedEventArgs e) { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); StoredContact storedContact = new StoredContact(contactStore); storedContact.RemoteId = Guid.Empty.ToString(); storedContact.GivenName = _random.Next(1000, 10000).ToString(); storedContact.FamilyName = "wang"; // 設置已知屬性 IDictionary<string, object> props = await storedContact.GetPropertiesAsync(); props.Add(KnownContactProperties.Email, "xxx@xxx.xxx"); // 設置擴展屬性 IDictionary<string, object> extprops = await storedContact.GetExtendedPropertiesAsync(); extprops.Add("ext1", "ext1"); // 保存當前聯繫人 await storedContact.SaveAsync(); } // 更新聯繫人 private async void btnUpdate_Click(object sender, RoutedEventArgs e) { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); string remoteId = Guid.Empty.ToString(); StoredContact storedContact = await contactStore.FindContactByRemoteIdAsync(remoteId); if (storedContact != null) { storedContact.GivenName = _random.Next(1000, 10000).ToString(); storedContact.FamilyName = "wang"; // 設置已知屬性 IDictionary<string, object> props = await storedContact.GetPropertiesAsync(); props[KnownContactProperties.Email] = "xxx@xxx.xxx"; // 設置擴展屬性 IDictionary<string, object> extprops = await storedContact.GetExtendedPropertiesAsync(); extprops["ext1"] = "ext1"; // 保存當前聯繫人 await storedContact.SaveAsync(); } } // 刪除聯繫人 private async void btnDelete_Click(object sender, RoutedEventArgs e) { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); string remoteId = Guid.Empty.ToString(); StoredContact storedContact = await contactStore.FindContactByRemoteIdAsync(remoteId); // 根據本地標識刪除聯繫人 await contactStore.DeleteContactAsync(storedContact.Id); } // 查詢聯繫人 private async void btnQuery_Click(object sender, RoutedEventArgs e) { ContactStore contactStore = await ContactStore.CreateOrOpenAsync(); ContactQueryResult result = contactStore.CreateContactQuery(); IReadOnlyList<StoredContact> storedContacts = await result.GetContactsAsync(); lblMsg.Text = "本 app 的自定義聯繫人總數: " + storedContacts.Count.ToString(); } } }
二、演示如何獲取 Windows Phone 的聯繫人數據
ContactsAndCalendar/AccessContacts.xamlexpress
<phone:PhoneApplicationPage x:Class="Demo.ContactsAndCalendar.AccessContacts" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <Grid Background="Transparent"> <StackPanel Orientation="Vertical"> <TextBlock x:Name="lblMsg" /> <Image Name="img" Width="100" Height="100" /> <Image Name="img2" Width="100" Height="100" Margin="0 10 0 0" /> <Button x:Name="btnGet" Content="獲取聯繫人數據" Click="btnGet_Click" /> </StackPanel> </Grid> </phone:PhoneApplicationPage>
ContactsAndCalendar/AccessContacts.xaml.cswindows
/* * 演示如何獲取 Windows Phone 的聯繫人數據 * * * 注: * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_CONTACTS" /> * 二、獲取聯繫人數據以前,應提供隱私策略並獲得用戶的容許。參見:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh184841(v=vs.105).aspx 的 2.11 * 三、關於獲取聯繫人和日曆數據請參見:http://www.cnblogs.com/webabcd/archive/2012/08/29/2661418.html */ using System; using System.Linq; using System.Windows; using Microsoft.Phone.Controls; using Microsoft.Phone.UserData; using System.Collections.Generic; using System.Windows.Media.Imaging; namespace Demo.ContactsAndCalendar { public partial class AccessContacts : PhoneApplicationPage { public AccessContacts() { InitializeComponent(); } private void btnGet_Click(object sender, RoutedEventArgs e) { // Contacts - 用於獲取聯繫人數據 Contacts contacts = new Contacts(); // Contacts.SearchCompleted - 當搜索聯繫人數據完成時所觸發的事件 contacts.SearchCompleted += contacts_SearchCompleted; /* * Contacts.SearchAsync(string filter, FilterKind filterKind, object state) - 按指定參數搜索聯繫人 * string filter - 搜索關鍵字 * FilterKind filterKind - 搜索範圍 * None - 所有聯繫人 * PinnedToStart - 在固定到開始屏幕的聯繫人中搜索 * EmailAddress - 按電子郵件地址搜索 * PhoneNumber - 按電話號碼搜索 * DisplayName - 按顯示名稱搜索 * Identifier - 按本地標識搜索 * object state - 異步處理的上下文對象 */ contacts.SearchAsync(string.Empty, FilterKind.None, null); } void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e) { /* * ContactsSearchEventArgs - 事件參數 * Filter, FilterKind, State - 對應 Contacts.SearchAsync() 方法中的參數 * Results - 搜索結果 * * Contact - 某個聯繫人的相關信息 * 詳細說明見文檔,如下就部分屬性和方法作說明 */ IEnumerable<Contact> contacts = e.Results; lblMsg.Text = "聯繫人數量:" + contacts.Count().ToString(); lblMsg.Text += Environment.NewLine; lblMsg.Text += "第一個聯繫人的所屬數據源數量:" + contacts.First().Accounts.Count(); lblMsg.Text += Environment.NewLine; // StorageKind 枚舉:Phone, WindowsLive, Outlook, Facebook, Other(自定義聯繫人存儲屬於 Other) lblMsg.Text += "第一個聯繫人的所屬的第一個數據源:" + contacts.First().Accounts.First().Kind.ToString(); lblMsg.Text += Environment.NewLine; lblMsg.Text += "第一個聯繫人的顯示名稱:" + contacts.First().DisplayName; lblMsg.Text += Environment.NewLine; // 第一個聯繫人的照片 BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(contacts.First().GetPicture()); img.Source = bitmapImage; // 第一種顯示 Stream 圖片的方法 img2.Source = Microsoft.Phone.PictureDecoder.DecodeJpeg(contacts.First().GetPicture()); // 第二種顯示 Stream 圖片的方法 } } }
三、演示如何獲取 Windows Phone 的日曆數據
ContactsAndCalendar/AccessCalendar.xamlapp
<phone:PhoneApplicationPage x:Class="Demo.ContactsAndCalendar.AccessCalendar" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" mc:Ignorable="d" shell:SystemTray.IsVisible="True"> <Grid Background="Transparent"> <StackPanel Orientation="Vertical"> <TextBlock x:Name="lblMsg" /> <Button x:Name="btnGet" Content="獲取日曆數據" Click="btnGet_Click" /> </StackPanel> </Grid> </phone:PhoneApplicationPage>
ContactsAndCalendar/AccessCalendar.xaml.csasp.net
/* * 演示如何獲取 Windows Phone 的日曆數據 * * * 注: * 一、須要在 mainfest 中增長 <Capability Name="ID_CAP_APPOINTMENTS" /> * 二、獲取日曆數據以前,應提供隱私策略並獲得用戶的容許。參見:http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/hh184841(v=vs.105).aspx 的 2.11 * 三、關於獲取聯繫人和日曆數據請參見:http://www.cnblogs.com/webabcd/archive/2012/08/29/2661418.html */ using System; using System.Linq; using System.Windows; using Microsoft.Phone.Controls; using Microsoft.Phone.UserData; using System.Collections.Generic; namespace Demo.ContactsAndCalendar { public partial class AccessCalendar : PhoneApplicationPage { public AccessCalendar() { InitializeComponent(); } private void btnGet_Click(object sender, RoutedEventArgs e) { // Appointments - 用於獲取日曆數據 Appointments appointments = new Appointments(); // Appointments.SearchCompleted - 當搜索日曆數據完成時所觸發的事件 appointments.SearchCompleted += appointments_SearchCompleted; DateTime start = DateTime.Now; DateTime end = start.AddDays(7); int max = 20; /* * Appointments.SearchAsync(DateTime startTimeInclusive, DateTime endTimeInclusive, int maximumItems, Account account, object state) - 按指定參數搜索日曆數據 * DateTime startTimeInclusive - 約會的開始時間 * DateTime endTimeInclusive - 約會的結束時間 * int maximumItems - 返回約會的最大數量 * Account account - 要搜索的約會的數據源 * object state - 異步處理的上下文對象 */ appointments.SearchAsync(start, end, max, "Appointments Test #1"); } void appointments_SearchCompleted(object sender, AppointmentsSearchEventArgs e) { /* * AppointmentsSearchEventArgs - 事件參數 * StartTimeInclusive, EndTimeInclusive, State - 對應 Appointments.SearchAsync() 方法中的參數 * Results - 搜索結果 * * Appointment - 某個約會的相關信息 * 詳細說明見文檔,如下就部分屬性和方法作說明 */ IEnumerable<Appointment> appointments = e.Results; lblMsg.Text = "獲取到的約會數量:" + appointments.Count().ToString(); lblMsg.Text += Environment.NewLine; lblMsg.Text += "第一個約會所屬數據源的帳戶名稱:" + appointments.First().Account.Name; lblMsg.Text += Environment.NewLine; // StorageKind 枚舉:Phone, WindowsLive, Outlook, Facebook, Other lblMsg.Text += "第一個約會所屬數據源的種類:" + appointments.First().Account.Kind.ToString(); lblMsg.Text += Environment.NewLine; lblMsg.Text += "第一個約會的主題:" + appointments.First().Subject; lblMsg.Text += Environment.NewLine; } } }
OK
[源碼下載]dom