Listpicker в Windows Phone 7

Windows Phone 7 — это современная мобильная операционная система от Microsoft. Особенностью данной ОС является наличие нового ядра Windows CE, новый уровень API и GUI. GUI Windows Phone 7 требует написание приложений на SilverLight/XNA. В данной статье я расскажу Вам о применении контрола Listpicker для создания максимально удобных приложений под Windows Phone 7.

ListPicker это один из контролов в Silverlight Toolkit для Windows Phone 7. Он предназначен для выбора какого-либо пункта из списка. Данный элемент очень похож на Combobox, но имеет значительно больше возможностей, чем ComboBox. Например, если необходимо отобразить список небольшой длины, то ListPicker покажет данные в виде Combobox-а (описывается свойством ItemTemplate и используется в тот момент, когда отображается один выбранный элемент из списка, т.е. контрол не активен), а если необходимо отобразить большее число позиции списка, то Listpicker покажет данные в виде ListBox-а (задается параметром FullModelItemTemplate и используется при выборе пользователя из всего списка, т.е. когда контрол ListPicker активен). Выбор формы отображения происходит автоматически. Именно поэтому, данный элемент управления очень удобно использовать. Преобразовать использованные в уже написанных приложениях ListBox-ы в ListPicker-ы очень легко — достаточно просто заменить название контрола в xaml файле с ListBox на ListPicker.

Создадим простое приложение на Microsoft Silverlight.
Для этого запускаем среду разработки и создаем новый проект Windows Phone Application Project.

Далее щелкните правой кнопкой мыши на References -> выберите Add Refrences -> и выберите Microsoft.Phone.Controls.Toolkit:

Затем, выбираем MainPage.xaml и происходит построение интерфейса пользователя, но для использования Microsoft.Phone.Controls.Toolkit необходимо после этого в нем объявлить

xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

Теперь добавим несколько контролов на главную страницу: TextBlock, TextBox и ListPicker:

Для использования ListPicker мы должны определить ItemTemplate и FullModeItemTemplate:

<phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Name="lpkItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
        <DataTemplate x:Name="lpkFullItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>

Полный код XAML:

<phone:PhoneApplicationPage
    x:Class="ListPickerDemo.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:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">
    <phone:PhoneApplicationPage.Resources>
        <DataTemplate x:Name="lpkItemTemplate">
            <TextBlock Text="{Binding Country}" />
        </DataTemplate>
        <DataTemplate x:Name="lpkFullItemTemplate">
           <TextBlock Text="{Binding Country}" />
        </DataTemplate>
    </phone:PhoneApplicationPage.Resources>
    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="ListPicker" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>
        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Name" Margin="14,0,0,0"/>
            <TextBox Grid.Row="1" Name="txtName"/>
            <TextBlock Text="Ages " Grid.Row="2" Margin="14,0,0,0"/>
            <TextBox Name="txtAge" Grid.Row="3"/>
            <TextBlock Text="Country" Grid.Row="4" Margin="14,0,0,0" />
            <toolkit:ListPicker FullModeItemTemplate="{Binding lpkFullItemTemplate}"
                Grid.Row="5" ItemTemplate="{Binding lpkItemTemplate}"
                x:Name="lpkCountry"/>
            <Button Content="Submit" Grid.Row="5" Height="72" HorizontalAlignment="Left" Margin="284,87,0,0" Name="btnSubmit" Click="btnSubmit_Click"
             VerticalAlignment="Top" Width="160" />
        </Grid>
    </Grid>
</phone:PhoneApplicationPage>

Затем переходим к MainPage.xaml.cs и задаем массив строк в качестве примера данных, а также добавляем для ListPicker свойства ItemSource:

C # код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace ListPickerDemo
{
    public partial class MainPage : PhoneApplicationPage
    {
        String[] Country = { "Viet Nam","Japan",
                              "China","USA",
                              "Poland","Brazil",
                         "Singapore","Philipin","Malaysia"};
        public MainPage()
        {
            InitializeComponent();
            this.lpkCountry.ItemsSource = Country;
        }
        private void btnSubmit_Click(object sender, RoutedEventArgs e)
        {
            String _Content = String.Format("Name: {0} \nAges: {1}\nCountry: {2}", txtName.Text,txtAge.Text,lpkCountry.SelectedItem);
            MessageBox.Show(_Content);
        }
    }
}

Теперь мы запускаем приложение для просмотра результата:

Если у вас небольшое число стран:

И если у вас длинный список стран (будет работать FullModeItemTamplate):

И после подтверждения формы:

Данный контрол очень удобен для использования практически во всех приложениях: для создания рубрицированного каталога книг электронной библиотеки, библиотеки аудиоплеера, для удобства заполнения форм регистрации и так далее. Применение ListPicker-а, несомненно, делает интерфейс приложения более удобным для пользователя и снижает время, затрачиваемое на выбор параметров. Простота применения и модификации позволяют использовать данный контрод программисту любого уровня — от новичка до профессионала.

Leave your comment