Контакты и календарь в Windows Phone 7
Дополнительные материалы к занятию можно скачать здесь.
Вложенные папки: ContactsAndCalendarTestApp
Ссылки: http://msdn.microsoft.com/en-us/library/hh202972(v=vs.92).aspx
В Windows Phone SDK 7.1 Beta 2 появилась возможность доступа к календарю и контактам пользователя. С помощью календаря можно получать уведомления о заранее запланированных событиях. Из контактов пользователя можно извлекать самую разную информацию, например, электронную почту, телефон, день рождения, фотографию пользователя и так далее. Теперь можно создавать приложения, извлекающие данные из самых разных источников данных. Предположим, часть данных о своих контактах пользователь хранит в самом телефоне, другая часть данных может храниться в сервисах Facebook, Windows Live, Twitter и тому подобное (таблице 34.1). Благодаря технологиям, заложенным в Windows Phone SDK 7.1 Beta 2, можно извлекать данные из подобных источников, руководствуясь разными критериями отбора.
В предлагаемой работе мы рассмотрим пример, описанный на сайте Microsoft (http://msdn.microsoft.com/en-us/library/hh202972(v=vs.92).aspx) (мы русифицировали интерфейс). Приложение осуществляет поиск информации, хранящейся в контактах пользователя по имени, телефону, электронной почте ( рис. 34.1) или по дате ( рис. 34.2).
Для начала нам нужно создать с помощью Visual Studio проект Silverlight for Windows Phone 7.1. Назовем приложение ContactsAndCalendarTestApp. Добавьте ссылки на библиотеки Microsoft.Phone.Controls.dll и mscorlib.extensions.dll.
Откройте файл MainPage.xaml и заполните его следующим содержимым:
<phone:PhoneApplicationPage x:Class="ContactsAndCalendarTestApp.MainPage" 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:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:MyApp="clr-namespace:ContactsAndCalendarTestApp" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <phone:PhoneApplicationPage.Resources> <DataTemplate x:Key="AccountTemplate"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <TextBlock Grid.Column="0" Text="{Binding Path=Name, Mode=OneWay}" /> <TextBlock Grid.Column="1" Text=" account: " /> <TextBlock Grid.Column="2" Text="{Binding Path=Kind, Mode=OneWay}" /> </Grid> </DataTemplate> <MyApp:ContactPictureConverter x:Key="ContactPictureConverter" /> </phone:PhoneApplicationPage.Resources> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <!--Pivot Control--> <controls:Pivot Title="Контакты и календарь" > <!--Pivot item one--> <controls:PivotItem Header="Контакты"> <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <TextBox Grid.Row="0" Grid.ColumnSpan="2" Name="contactFilterString" /> <RadioButton Grid.Row="1" Grid.Column="0" Checked="FilterChange" Name="name" Content="Имя" /> <RadioButton Grid.Row="1" Grid.Column="1" Checked="FilterChange" Name="phone" Content="Телефон"/> <RadioButton Grid.Row="2" Grid.Column="0" Checked="FilterChange" Name="email" Content="email"/> <Button Grid.Row="2" Grid.Column="1" Content="Поиск" Click="SearchContacts_Click" /> </Grid> <TextBlock Name="ContactResultsLabel" Text="Поиск контактов" TextWrapping="Wrap" Margin="12,0,0,0" /> <ListBox Name="ContactResultsData" ItemsSource="{Binding}" Tap="ContactResultsData_Tap" Height="300" Margin="24,0,0,0" > <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" > <Border BorderThickness="2" HorizontalAlignment="Left" VerticalAlignment="Center" BorderBrush="{StaticResource PhoneAccentBrush}" > <Image Source="{Binding Converter={StaticResource ContactPictureConverter}}" Width="48" Height="48" Stretch="Fill" /> </Border> <TextBlock Name="ContactResults" Text="{Binding Path=DisplayName, Mode=OneWay}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Margin="18,8,0,0" /> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </StackPanel> </controls:PivotItem> <!--Pivot item two--> <controls:PivotItem Header="Учетные записи"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <StackPanel Grid.Row="0" > <TextBlock Text="Учетная запись контакта" Foreground="{StaticResource PhoneAccentBrush}" Style="{StaticResource PhoneTextLargeStyle}" /> <ListBox Name="ContactAccounts" ItemsSource="{Binding}" ItemTemplate="{StaticResource AccountTemplate}" Height="200" Margin="24,0,0,0" /> </StackPanel> <StackPanel Grid.Row="1" > <TextBlock Text="Контакты событий" Foreground="{StaticResource PhoneAccentBrush}" Style="{StaticResource PhoneTextLargeStyle}" /> <ListBox Name="CalendarAccounts" ItemsSource="{Binding}" ItemTemplate="{StaticResource AccountTemplate}" Height="200" Margin="24,0,0,0" /> </StackPanel> </Grid> </controls:PivotItem> <!--Pivot item three--> <controls:PivotItem Header="События"> <StackPanel Height="Auto" Width="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" > <TextBlock Text="События между" Foreground="{StaticResource PhoneAccentBrush}" /> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="Дата начала" /> <TextBlock Grid.Row="0" Grid.Column="1" Text="Дата завершения" /> <TextBlock Grid.Row="1" Grid.Column="0" Text="placeholder" Name="StartDate" /> <TextBlock Grid.Row="1" Grid.Column="1" Text="placeholder" Name="EndDate" /> <Button Grid.Row="2" Grid.ColumnSpan="2" Content="search" Click="SearchAppointments_Click" HorizontalAlignment="Center" /> </Grid> <TextBlock Name="AppointmentResultsLabel" Text="Поиск событий" TextWrapping="Wrap" /> <ListBox Name="AppointmentResultsData" ItemsSource="{Binding}" Tap="AppointmentResultsData_Tap" Height="400" ScrollViewer.ManipulationMode="Control" Margin="24,0,0,0" > <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Path=Subject, Mode=OneWay}" FontSize="{StaticResource PhoneFontSizeExtraLarge}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </StackPanel> </controls:PivotItem> </controls:Pivot> </Grid> </phone:PhoneApplicationPage>