Разработка приложений для Windows Phone 7

Создание элементов интерфейса с помощью Microsoft Expression Blend

Разбить на страницы
Показывать лекцию целиком

Дополнительные материалы к занятию можно скачать здесь.

Microsoft Expression Blend - программа от корпорации Microsoft, предназначенная для разработки дизайна веб-интерфейсов и графических настольных приложений, совмещает в себе особенности этих двух типов приложений. Интерактивный WYSIWYG-редактор для дизайна интерфейсов, основанных на XAML-приложениях, для Windows Presentation Foundation и приложения Silverlight. Входит в состав пакета графических программ Microsoft Expression Studio. Expression Blend поддерживает WPF, в котором используется метод OpenType и ClearType, основанный на 2D- и 3D-элементах управления с аппаратным ускорением через DirectX [22].

Blend представляет собой современное средство визуального проектирования интерфейсов, оснащенное встроенным редактором XAML, что позволяет, с одной стороны проектировать интерфейсы не обращая внимания на исходный код, а с другой стороны, позволяет более "тонко" настраивать создаваемый интерфейс.

Так как свойства объектов в Blend неразрывно связаны с возможностями XAML, дальнейшее описание элементов проводится через представление этих объектов в Blend, как графических, так и интерактивных, т.е. так как видит это дизайнер.

Интерфейс Blend

Blend имеет современный интерфейс, привычный как дизайнерам графики, так и веб-дизайнерам.

Рабочее пространство разделено на три основные части.

Все панели позволяют переключаться в "плавающий" режим или исчезать с экрана при помощи "горячих" клавиш. В меню Tools/Options/Workspace есть возможность настройки размеров панелей. Blend использует большое количество "горячих" клавиш, спасибо разработчикам о заботе, большинство сочетаний хорошо известны всем дизайнерам, работающим с графическими программами от Adobe.

Панель инструментов имеет практически стандартный вид для программ редакторов векторной графики и включает в себя основные инструменты создания и редактирования графики плюс специфичные для Blend инструменты и библиотеки стандартных и пользовательских элементов.

По умолчанию в Blend включены две библиотеки интерфейсных элементов System Controls - стандартные элементы и Simple Styles - библиотека-пример построения пользовательских интерфейсных элементов, раскрывающая возможности XAML.

Инструменты рисования

Векторный редактор Blend обладает всеми возможностями современного векторного редактора плюс обладает некоторыми уникальными свойствами.

Инструменты для построения и редактирования векторной графики типичны для многих векторных редакторов и включают в себя редактор кривых, представленный инструментами: Перо (Pen), Карандаш (Pencil), инструмент выделения (Selection) и инструмент непосредственного выделения (Direct Selection), а также инструментами для построения простых геометрических форм: Прямоугольник (Rectangle), Овал (Ellipse) и Линия (Line).

Blend позволяет:
создавать составные векторные объекты (Compound paths);
создавать векторные объекты посредством логических операций (вычитание, сложение и т.д.) (Combining paths);
переводить шрифт в векторный объект (Convert to Path);
кадрировать как растровое, так и векторное изображение (Clipping paths);
создавать маски прозрачности (Opacity masks).

Настройка свойств графических элементов, имеет ряд особенностей, делающих работу дизайнера более удобной, и позволяет достигнуть большей гибкости в построении интерфейса по сравнению с обычными (классическими) способами.

Упражнение 11.1. Работа с контейнером Grid

Запускаем программу Microsoft Expression Blend 4 -> Projects -> New Project

Выберем тип проекта: Silverlight+Web site. Назовем проект p4.

Интерфейс приложения задается в файле MainPage.xaml. Этот файл является xml-документом. Просмотрим его содержимое. Для этого в правом верхнем углу среды разработки выберем закладку Projects.

Щелкнем правой кнопкой мыши по файлу MainPage.xaml -> Edit Externally.

При этом откроется блокнот с содержимым файла MainPage.xaml.

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>
    

Корневым элементом является элемент UserControl. В заголовке документа можно задать ширину и высоту в пикселях. Внутри корневого элемента располагается контейнер Grid, являющийся аналогом Windows Form. Закроем блокнот.

Разместим в контейнер Grid несколько элементов управления, после чего добавим немного программного кода.

Добавим к проекту новую папку, назовем ее Images: Solution Explorer -> p4 -> Add New Folder -> Images

Вставьте несколько фотографий в папку Images.

После этого нужно подключить эти изображения к проекту. Для этого щелкаем правой кнопкой мыши по папке Images -> Add Existing Items.

Указываем путь к изображениям и добавляем их к проекту.

Подтверждаем добавление.

В панели инструментов есть элемент управления Button (кнопка). Активизируем его и размещаем кнопку в контейнере Grid.

Добавляем надпись.

После этого добавляем элемент управления Image: >> -> Controls -> All -> Image.

Разместим элемент управления Image в контейнере Grid.

Нажмем правой кнопкой мыши по элементу управления Image -> View Xaml.

Появится код xaml:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White">
		<Button Content="Отобразить картинку!" HorizontalAlignment="Left" Height="47" 
  Margin="13,20,0,0" VerticalAlignment="Top" Width="177"/>
		<Image Margin="17,95,19,31"/>
	</Grid>
</UserControl>
    

Добавим свойство Name в элемент управления Image:

<Image Margin="17,95,19,31" Name="img"/>
    

Добавим событие Click в код xaml кнопки: Click="bttn_Click"

В итоге мы имеем следующий код MainPage.xaml:

<UserControl x:Class="p4_1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">
<Button Name="bttn" Click="bttn_Click" Content="Отобразить картинку!" HorizontalAlignment="Left" 
 Height="47" Margin="13,20,0,0" VerticalAlignment="Top" 
  Width="177" />
        <Image Name="img" />
    </Grid>
</UserControl>
    

Затем перейдем в окно кода и впишем:

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 System.Windows.Media.Imaging;

namespace p4_1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void bttn_Click(object sender, RoutedEventArgs e)
        {
            string[] picture = new string[] {"1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png" };
            int n = picture.Length - 1;
            Random rand = new Random();
            string str = "Images/" + picture[rand.Next(n)];

            BitmapImage bmi = new BitmapImage(new Uri(str, UriKind.RelativeOrAbsolute));
            img.Source = bmi;
        }
    }
}
    

При нажатии на кнопку отображаются фотографии случайным образом.

Упражнение 11.2. Работа с холстом

В ходе выполнения данной работы вместо контейнера Grid (сетка) мы будем использовать холст (Canvas).

Создаем новый проект Silverlight в Microsoft Expression Blend. Назовем проект p4_2.

Правой кнопкой мыши щелкаем по файлу MainPage.xaml Edit Externally

При этом в блокноте открывается код:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4_2.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>
    

Раздел контейнера <Grid…> нужно заменить на

    <Canvas Name="cn1">
        
    </Canvas>
    

Затем из панели элементов нужно перетащить кнопку, задать ее размеры и сделать надпись:

Кнопке будет соответствовать следующий код xaml:

<Button FontSize="18" Name="bttn" Click="bttn_Click" Content="Выбрать цветок!" Height="50" 
 Canvas.Left="10" Canvas.Top="10" Width="170"/>
    

Далее, добавляем раскрывающийся список ComboBox (cmbFlower) и элемент управления ContentControl (cnt)

В результате мы получаем следующий код xaml:

<UserControl x:Class="p4_2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Canvas Name="cn1">
        <Button FontSize="18" Name="bttn" Click="bttn_Click" 
Content="Выбрать цветок!" Height="50" Canvas.Left="10" 
Canvas.Top="10" Width="170"/>
        <ComboBox Canvas.Left="200" Canvas.Top="10" Name="cmbFlower" 
FontSize="18" Width="170" Height="50">
        </ComboBox>
        <ContentControl FontSize="18" Canvas.Left="10" Canvas.Top="90" 
Height="50" Name="cnt" Width="500" />
    </Canvas>
</UserControl>
    

Добавим нашему приложению функциональности. Код MainPage.xaml.cs:

using System;
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;

namespace p4_2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            FillcmbFlower();
        }

        private void FillcmbFlower()
        {
            cmbFlower.Items.Add("Роза");
            cmbFlower.Items.Add("Ландыш");
            cmbFlower.Items.Add("Магнолия");
            cmbFlower.Items.Add("Шафран");
            cmbFlower.Items.Add("Хризаетемма");
        }

        private void bttn_Click(object sender, RoutedEventArgs e)
        {
            string strFlower, str;
            strFlower = System.Convert.ToString(cmbFlower.SelectedValue);
            str = "Ваш любимый цветок ... " + strFlower + ". Отличный выбор!";
            cnt.Content = str;
        }
    }
}
    

Результат:

Страницы:

Дополнительные материалы к занятию можно скачать здесь.

Microsoft Expression Blend - программа от корпорации Microsoft, предназначенная для разработки дизайна веб-интерфейсов и графических настольных приложений, совмещает в себе особенности этих двух типов приложений. Интерактивный WYSIWYG-редактор для дизайна интерфейсов, основанных на XAML-приложениях, для Windows Presentation Foundation и приложения Silverlight. Входит в состав пакета графических программ Microsoft Expression Studio. Expression Blend поддерживает WPF, в котором используется метод OpenType и ClearType, основанный на 2D- и 3D-элементах управления с аппаратным ускорением через DirectX [22].

Blend представляет собой современное средство визуального проектирования интерфейсов, оснащенное встроенным редактором XAML, что позволяет, с одной стороны проектировать интерфейсы не обращая внимания на исходный код, а с другой стороны, позволяет более "тонко" настраивать создаваемый интерфейс.

Так как свойства объектов в Blend неразрывно связаны с возможностями XAML, дальнейшее описание элементов проводится через представление этих объектов в Blend, как графических, так и интерактивных, т.е. так как видит это дизайнер.

Интерфейс Blend

Blend имеет современный интерфейс, привычный как дизайнерам графики, так и веб-дизайнерам.

Рабочее пространство разделено на три основные части.

Все панели позволяют переключаться в "плавающий" режим или исчезать с экрана при помощи "горячих" клавиш. В меню Tools/Options/Workspace есть возможность настройки размеров панелей. Blend использует большое количество "горячих" клавиш, спасибо разработчикам о заботе, большинство сочетаний хорошо известны всем дизайнерам, работающим с графическими программами от Adobe.

Панель инструментов имеет практически стандартный вид для программ редакторов векторной графики и включает в себя основные инструменты создания и редактирования графики плюс специфичные для Blend инструменты и библиотеки стандартных и пользовательских элементов.

По умолчанию в Blend включены две библиотеки интерфейсных элементов System Controls - стандартные элементы и Simple Styles - библиотека-пример построения пользовательских интерфейсных элементов, раскрывающая возможности XAML.

Инструменты рисования

Векторный редактор Blend обладает всеми возможностями современного векторного редактора плюс обладает некоторыми уникальными свойствами.

Инструменты для построения и редактирования векторной графики типичны для многих векторных редакторов и включают в себя редактор кривых, представленный инструментами: Перо (Pen), Карандаш (Pencil), инструмент выделения (Selection) и инструмент непосредственного выделения (Direct Selection), а также инструментами для построения простых геометрических форм: Прямоугольник (Rectangle), Овал (Ellipse) и Линия (Line).

Blend позволяет:
создавать составные векторные объекты (Compound paths);
создавать векторные объекты посредством логических операций (вычитание, сложение и т.д.) (Combining paths);
переводить шрифт в векторный объект (Convert to Path);
кадрировать как растровое, так и векторное изображение (Clipping paths);
создавать маски прозрачности (Opacity masks).

Настройка свойств графических элементов, имеет ряд особенностей, делающих работу дизайнера более удобной, и позволяет достигнуть большей гибкости в построении интерфейса по сравнению с обычными (классическими) способами.

Упражнение 11.1. Работа с контейнером Grid

Запускаем программу Microsoft Expression Blend 4 -> Projects -> New Project

Выберем тип проекта: Silverlight+Web site. Назовем проект p4.

Интерфейс приложения задается в файле MainPage.xaml. Этот файл является xml-документом. Просмотрим его содержимое. Для этого в правом верхнем углу среды разработки выберем закладку Projects.

Щелкнем правой кнопкой мыши по файлу MainPage.xaml -> Edit Externally.

При этом откроется блокнот с содержимым файла MainPage.xaml.

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>
    

Корневым элементом является элемент UserControl. В заголовке документа можно задать ширину и высоту в пикселях. Внутри корневого элемента располагается контейнер Grid, являющийся аналогом Windows Form. Закроем блокнот.

Разместим в контейнер Grid несколько элементов управления, после чего добавим немного программного кода.

Добавим к проекту новую папку, назовем ее Images: Solution Explorer -> p4 -> Add New Folder -> Images

Вставьте несколько фотографий в папку Images.

После этого нужно подключить эти изображения к проекту. Для этого щелкаем правой кнопкой мыши по папке Images -> Add Existing Items.

Указываем путь к изображениям и добавляем их к проекту.

Подтверждаем добавление.

В панели инструментов есть элемент управления Button (кнопка). Активизируем его и размещаем кнопку в контейнере Grid.

Добавляем надпись.

После этого добавляем элемент управления Image: >> -> Controls -> All -> Image.

Разместим элемент управления Image в контейнере Grid.

Нажмем правой кнопкой мыши по элементу управления Image -> View Xaml.

Появится код xaml:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White">
		<Button Content="Отобразить картинку!" HorizontalAlignment="Left" Height="47" 
  Margin="13,20,0,0" VerticalAlignment="Top" Width="177"/>
		<Image Margin="17,95,19,31"/>
	</Grid>
</UserControl>
    

Добавим свойство Name в элемент управления Image:

<Image Margin="17,95,19,31" Name="img"/>
    

Добавим событие Click в код xaml кнопки: Click="bttn_Click"

В итоге мы имеем следующий код MainPage.xaml:

<UserControl x:Class="p4_1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">
<Button Name="bttn" Click="bttn_Click" Content="Отобразить картинку!" HorizontalAlignment="Left" 
 Height="47" Margin="13,20,0,0" VerticalAlignment="Top" 
  Width="177" />
        <Image Name="img" />
    </Grid>
</UserControl>
    

Затем перейдем в окно кода и впишем:

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 System.Windows.Media.Imaging;

namespace p4_1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void bttn_Click(object sender, RoutedEventArgs e)
        {
            string[] picture = new string[] {"1.png", "2.png", "3.png", "4.png", "5.png", "6.png", "7.png" };
            int n = picture.Length - 1;
            Random rand = new Random();
            string str = "Images/" + picture[rand.Next(n)];

            BitmapImage bmi = new BitmapImage(new Uri(str, UriKind.RelativeOrAbsolute));
            img.Source = bmi;
        }
    }
}
    

При нажатии на кнопку отображаются фотографии случайным образом.

Упражнение 11.2. Работа с холстом

В ходе выполнения данной работы вместо контейнера Grid (сетка) мы будем использовать холст (Canvas).

Создаем новый проект Silverlight в Microsoft Expression Blend. Назовем проект p4_2.

Правой кнопкой мыши щелкаем по файлу MainPage.xaml Edit Externally

При этом в блокноте открывается код:

<UserControl
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="p4_2.MainPage"
	Width="640" Height="480">

	<Grid x:Name="LayoutRoot" Background="White"/>
</UserControl>
    

Раздел контейнера <Grid…> нужно заменить на

    <Canvas Name="cn1">
        
    </Canvas>
    

Затем из панели элементов нужно перетащить кнопку, задать ее размеры и сделать надпись:

Кнопке будет соответствовать следующий код xaml:

<Button FontSize="18" Name="bttn" Click="bttn_Click" Content="Выбрать цветок!" Height="50" 
 Canvas.Left="10" Canvas.Top="10" Width="170"/>
    

Далее, добавляем раскрывающийся список ComboBox (cmbFlower) и элемент управления ContentControl (cnt)

В результате мы получаем следующий код xaml:

<UserControl x:Class="p4_2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Canvas Name="cn1">
        <Button FontSize="18" Name="bttn" Click="bttn_Click" 
Content="Выбрать цветок!" Height="50" Canvas.Left="10" 
Canvas.Top="10" Width="170"/>
        <ComboBox Canvas.Left="200" Canvas.Top="10" Name="cmbFlower" 
FontSize="18" Width="170" Height="50">
        </ComboBox>
        <ContentControl FontSize="18" Canvas.Left="10" Canvas.Top="90" 
Height="50" Name="cnt" Width="500" />
    </Canvas>
</UserControl>
    

Добавим нашему приложению функциональности. Код MainPage.xaml.cs:

using System;
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;

namespace p4_2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            FillcmbFlower();
        }

        private void FillcmbFlower()
        {
            cmbFlower.Items.Add("Роза");
            cmbFlower.Items.Add("Ландыш");
            cmbFlower.Items.Add("Магнолия");
            cmbFlower.Items.Add("Шафран");
            cmbFlower.Items.Add("Хризаетемма");
        }

        private void bttn_Click(object sender, RoutedEventArgs e)
        {
            string strFlower, str;
            strFlower = System.Convert.ToString(cmbFlower.SelectedValue);
            str = "Ваш любимый цветок ... " + strFlower + ". Отличный выбор!";
            cnt.Content = str;
        }
    }
}
    

Результат:

Вернуться к учебному плану