Статьи

Создание Wallview для изображений с помощью Silverlight: Дизайн

Как следует из названия, мы собираемся создать Wallview, вдохновленный iTunes. Это руководство разделено на две части — одна для разработки в Blend, а другая для кода в Visual Studio.


Взгляните на это видео-демо о конечном результате, к которому мы будем стремиться (или просто посмотрите веб-демонстрацию выше):


В этой части руководства мы собираемся разработать два пользовательских элемента управления в Expression Blend. Этот учебник выглядит довольно длинным из количества шагов, но это потому, что он очень тщательный; есть объяснение и скриншот практически для каждого клика, который вам нужно сделать. Причина, по которой я написал это так подробно, в том, что мои коллеги из университета сочли Blend слишком сложным и сложным в использовании.


Откройте Visual Studio и нажмите «Файл»> «Создать»> «Проект» в верхней строке меню.


Выберите приложение Silverlight Visual C # из меню и введите «WallviewApp» для имени проекта внизу, а также место для сохранения проекта.

После этого вы увидите всплывающее окно. Убедитесь, что вы отметили флажок внизу и выберите Silverlight 4 из выпадающего списка.


Запустите Expression Blend и откройте проект, который мы только что создали в Visual Studio.

Перейдите к файлу проекта в каталоге проекта и откройте его.


Щелкните правой кнопкой мыши на проекте WallviewApp внутри дерева проекта и выберите «Добавить новую папку». Сделайте это дважды, назовите папки «usercontrols» и «image».


Щелкните правой кнопкой мыши по вновь созданной папке «usercontrols» и выберите «Добавить новый элемент …».

Во всплывающем окне убедитесь, что выбран UserControl, и введите «image.xaml» в качестве имени.


Выберите контейнер StackPanel на панели инструментов, которая по умолчанию должна быть слева …

… и нарисуйте прямоугольник в середине LayoutRoot, который был там с самого начала.


Убедитесь, что StackPanel выбран в левой части панели «Объекты и временная шкала». Справа вы видите параметры выбранного в данный момент элемента. Измените ширину и высоту на «Авто (0)», нажав на скрещенные стрелки рядом с текстовым полем. Горизонтальное выравнивание по центру и Вертикальное выравнивание по верху. Сбросьте маржу, щелкнув по белому квадратному значку рядом с текстовыми полями, и выберите «Сбросить» в меню. После этого установите Верхнюю маржу на «5». Теперь панель «Макет» должна выглядеть следующим образом, и поскольку размер StackPanel составляет 0x0 пикселей, его больше не видно:


Идите вперед и выберите контейнер Grid на панели инструментов слева (там, где мы ранее выбирали StackPanel) и нарисуйте еще один прямоугольник в середине вашего рабочего пространства.


Взгляните на панель «Объекты и временная шкала» и убедитесь, что Grid находится внутри StackPanel. Если это не просто нажмите и перетащите его в StackPanel.

Настройте параметры макета, пока сетка еще выбрана. Установите ширину и высоту на «200» пикселей, горизонтальное и вертикальное выравнивание на «растянуть», если это не так.


Теперь мы собираемся создать границу. Вы можете выбрать его как Grid и StackPanel на панели инструментов слева. Нарисуйте прямоугольник с границей и переместите его в сетку, если это еще не сделано.


Откройте область для кистей с правой стороны и измените BorderBrush на следующий цвет: «# 0076A2F9». Затем установите BorderThickness на панели «Внешний вид» на «5» пикселей во всех четырех направлениях, а CornerRadius на «5» пикселей. Ширина и высота должны быть установлены на «Авто», нажав на скрещенные стрелки рядом с текстовым полем. Горизонтальное выравнивание должно быть установлено в «Центр», а вертикальное выравнивание в «Нижний»:


Теперь мы собираемся добавить ShadowEffect к границе. Нажмите кнопку «Создать» внутри области «Внешний вид», расположенную рядом с «Эффектом». В появившемся всплывающем окне выберите «DropShadowEffect» и нажмите «ОК».

Настройте параметры тени, появившиеся прямо под кнопкой «Создать», установив BlurRadius на «10» и ShadowDepth на «1»:


Теперь мы собираемся импортировать изображение в Blend. Вы можете сделать это либо щелкнув правой кнопкой мыши по папке «image», которую мы создали ранее и выбрав «Add Existing Item», либо выбрав папку и перетащив изображение прямо на нее со своего рабочего стола или из проводника.

После импорта дерево вашего проекта должно выглядеть так:


Чтобы использовать изображение в элементе управления, просто перетащите его из браузера проекта, куда вы его импортировали, прямо в рабочую область. Как вы видите, он слишком большой и находится в неправильном контейнере:

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


Измените высоту и ширину изображения на «Авто», горизонтальное и вертикальное выравнивание на «Центр», поля на «0» и растяните на «Равномерно» на панели «Общие свойства»:


Выберите инструмент TextBlock на панели инструментов слева и создайте TextBlock где-нибудь в рабочей области.

Нажмите клавишу «ESC» на клавиатуре, чтобы отменить редактирование текста внутри TextBlock.


Нажмите и перетащите TextBlock на панели «Объекты и временная шкала» в панель StackPanel, которую мы создали ранее.

После этого измените цвет переднего плана на «# FF1F1F1F», а параметры макета с правой стороны выберите следующие значения: ширина: «авто», высота: «авто», горизонтальное выравнивание: «центр», вертикальное выравнивание: «верх», поле -Вверх: «8». Установите значение «Ничего», отметив текст «TextBlock» и удалив его, или щелкнув по белому квадрату рядом с ним и нажав «Сброс». Также измените шрифт текста на «Verdana»:


Создайте еще один текстовый блок, повторив шаги 16 и 17 или выбрав тот, который мы уже создали, на панели «Объекты и временная шкала» и нажав Ctrl + C, а затем Ctrl + V, чтобы продублировать его. Единственное, что мы должны сделать в отличие от шага 17, — это то, что мы не хотим устанавливать какие-либо поля. Если вы сделали дубликат метода, вы просто устанавливаете Top-Margin на «0» или нажимаете маленький белый квадрат рядом с ним и сбрасываете Margin:


Чтобы иметь возможность работать с элементами, которые мы создали, нам нужно дать им имена. Так что продолжайте и переименуйте TextBlock в самом низу в «imgDate», медленно щелкнув дважды или щелкнув правой кнопкой мыши и выбрав «переименовать». Измените имя другого TextBlock на «imgName», Image на «img», Border на «imgBorder» и Grid на «imgSize». Теперь мы закончили с дизайном этого элемента управления, и ваша иерархия должна выглядеть следующим образом:

И дизайн должен выглядеть так:

Конечно, вы не можете видеть два TextBlocks в вашем проекте, так как мы установили их Text на несколько шагов раньше.

Я лично оставляю имена Textblocks, пока они мне нужны, чтобы закончить дизайн, прежде чем я их удалю. Таким образом, вы можете контролировать, если все в нужном месте.


Если вы хотите взглянуть на только что сгенерированный код, щелкните значок «<>» в середине в верхней части правой полосы прокрутки рабочей области. Чтобы вернуться к представлению дизайна, щелкните значок в верхней части.

Наш код выглядит так:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<UserControl
    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»
    x:Class=»WallviewApp.image»
    d:DesignWidth=»640″ d:DesignHeight=»480″>
 
    <Grid x:Name=»LayoutRoot»>
        <StackPanel HorizontalAlignment=»Center» VerticalAlignment=»Top» Margin=»0,5,0,0″>
            <Grid x:Name=»imgSize» Width=»200″ Height=»200″>
                <Border x:Name=»imgBorder» BorderBrush=»#0076A2F9″ BorderThickness=»5″ VerticalAlignment=»Bottom» HorizontalAlignment=»Center» CornerRadius=»5″>
                    <Border.Effect>
                        <DropShadowEffect BlurRadius=»10″ ShadowDepth=»1″/>
                    </Border.Effect>
                    <Image x:Name=»img» Source=»/WallviewApp;component/image/avatar_launch_poster.jpg» HorizontalAlignment=»Center» VerticalAlignment=»Center»/>
                </Border>
            </Grid>
            <TextBlock x:Name=»imgName» TextWrapping=»Wrap» HorizontalAlignment=»Center» VerticalAlignment=»Top» Margin=»0,8,0,0″ FontFamily=»Verdana» Foreground=»#FF1F1F1F»/>
            <TextBlock x:Name=»imgDate» TextWrapping=»Wrap» HorizontalAlignment=»Center» VerticalAlignment=»Top» FontFamily=»Verdana» Foreground=»#FF1F1F1F»/>
        </StackPanel>
    </Grid>
</UserControl>

Убедитесь, что вы переключаетесь обратно в представление дизайна.

Создайте еще один UserControl в папке «usercontrols», щелкнув правой кнопкой мыши по папке и выбрав «Добавить новый элемент» в меню.

Во всплывающем окне выберите «UserControl» и в качестве имени введите «wallview-img.xaml»:


Выберите контейнер ScrollViewer на панели инструментов слева …

… и нарисуйте прямоугольник с ним в рабочей области.


Пока выбран ScrollViewer, осмотрите область кистей с правой стороны и измените BorderBrush на «No Brush».

Установите BorderThickness на «0» для всех четырех направлений, «Горизонтальное и вертикальное выравнивание» на «Растянуть», «Верхнее поле» на «29» пикселей, а остальные поля на «0». Также контролируйте, если ширина и высота на «Авто», нажав скрещенные стрелки. Далее расширьте область Layout, нажав на маленькую стрелку и установите все четыре направления отступа на «0»:


Выберите StackPanel на панели инструментов слева …

… и создайте StackPanel в середине ScrollViewer.


Выберите панель StackPanel, если ее еще нет, на панели «Объекты и временная шкала», затем нажмите кнопку «Кисть сплошного цвета» в области «Кисти» (это вторая слева, справа рядом с «Без кисти») и установите цвет фона на «# FFB8B8B8». Кроме того, измените горизонтальное и вертикальное выравнивание на «Растянуть», проверьте, установлены ли для ширины и высоты значение «Авто» и все ли поля равны «0»:


Выберите Grid Container на панели инструментов и создайте Grid.

Если вы создали его внутри StackPanel, просто перетащите его в LayoutRoot-Grid:


Измените высоту сетки на «30» пикселей, а ширину на «Авто». Выравнивание по горизонтали на «Растянуть», Выравнивание по вертикали на «Верх» и Поля на (-1, -1, -1, 0) для (слева, сверху, справа, снизу):


Выберите инструмент Rectangle Tool слева, который находится над контейнерами, которые мы уже использовали несколько раз …

… и нарисуйте коробку в рабочей области.

Переместите прямоугольник в сетку, которую мы создали на предыдущем шаге:


Измените цвет заливки прямоугольника на «# FF4E4E4E»:

И цвет обводки до «# FF1F1F1F»:

Установите для параметра «Высота и ширина» значение «Авто», для горизонтального и вертикального выравнивания значение «Растянуть» и сбросьте поле, если оно есть:


Теперь мы создаем StackPanel и перемещаем его в Grid:


Измените параметры StackPanel на следующие: Ширина и Высота на «Авто», Ориентация на «Горизонтально», Горизонтальное выравнивание на «Влево», Вертикальное выравнивание на «Центр» и Поля слева на «10»:


Выберите кнопку-инструмент на панели инструментов …

… и создать кнопку где-нибудь в рабочей области.

Затем перетащите его в StackPanel, который мы только что создали:


Установите для ширины и высоты кнопки значение «Авто», для параметра «Горизонтальное выравнивание» — «Растянуть», для вертикального выравнивания — «Центр», для полей, если они есть, задано значение «0», для содержимого — «все альбомы» (специально выделены пробелы, поэтому кнопка по умолчанию выглядит чуть лучше) и шрифт к «Вердане»:


Выберите кнопку и нажмите Ctrl + C, Ctrl + V, чтобы скопировать и вставить кнопку в той же панели StackPanel, затем измените Margin-Left на «5» и Content на «Current Album»:


Выберите StackPanel с двумя кнопками в ней на панели «Объекты и временная шкала» и нажмите CTRL + C, CTRL + V, чтобы дублировать ее. Теперь ваша иерархия должна выглядеть так:


Выберите дублирующую StackPanel, если вы этого еще не сделали, измените HorizontalAlignment на «Right» и установите все поля на «0», кроме правого, для которого вы установили «10» пикселей.


Выберите одну из кнопок в дублированном StackPanel и измените ее содержимое на «<», если вы выбрали левую, и на «>» для правой. Теперь у нас есть две кнопки с символом стрелки, которые позже будут использоваться для навигации.


Выберите Slider-Tool на панели инструментов и создайте Slider в своей рабочей области.

Затем перетащите его в верхнюю часть нижней StackPanel:


Выберите ползунок и настройте его на следующие параметры:

  • Ширина: «100»,
  • Высота: «Авто»,
  • Горизонтальное выравнивание: «Центр»,
  • Вертикальное выравнивание: «Центр»,
  • Маржа-справа: «20»,
  • другие поля: «0»,

И под Общими свойствами:

  • LargeChange: «0,2»;
  • Максимум: «1,5»;
  • Минимум: «0,5»:
  • SmallChange: «0,1»;
  • Значение: «1».

Как и в образе UserControl, который мы создали ранее, мы собираемся переименовать элементы, которые нам понадобятся позже. Снизу вверх: кнопка: «btnNext», кнопка: «btnPrev», ползунок: «ползунок», пропустить StackPanel, кнопка: «btnCurrentAlbum», кнопка: «btnAllAlbums», пропустить следующие элементы до StackPanel, который находится внутри ScrollViewer. Переименуйте эту StackPanel в «контент». Теперь иерархия должна выглядеть так:


Вот как теперь должен выглядеть UserControl «wallview-img»:


Вот как выглядит xaml-код для нашего UserControl «wallview.img.xaml»:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<UserControl
    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»
    x:Class=»WallviewApp.wallview_img»
    d:DesignWidth=»640″ d:DesignHeight=»480″>
 
    <Grid x:Name=»LayoutRoot»>
        <ScrollViewer Margin=»0,29,0,0″ Padding=»0″ BorderBrush=»{x:Null}» BorderThickness=»0″>
            <StackPanel x:Name=»content» Background=»#FFB8B8B8″/>
        </ScrollViewer>
        <Grid Height=»30″ VerticalAlignment=»Top» Margin=»-1,-1,-1,0″>
            <Rectangle Fill=»#FF4E4E4E» Stroke=»#FF1F1F1F»/>
            <StackPanel HorizontalAlignment=»Left» VerticalAlignment=»Center» Margin=»10,0,0,0″ Orientation=»Horizontal»>
                <Button x:Name=»btnAllAlbums» Content=» All Albums » VerticalAlignment=»Center» FontFamily=»Verdana»/>
                <Button x:Name=»btnCurrentAlbum» Content=» Current Album » VerticalAlignment=»Center» FontFamily=»Verdana» Margin=»5,0,0,0″/>
            </StackPanel>
            <StackPanel HorizontalAlignment=»Right» VerticalAlignment=»Center» Margin=»0,0,10,0″ Orientation=»Horizontal»>
                <Slider x:Name=»slider» Width=»100″ Margin=»0,0,20,0″ LargeChange=»0.2″ Maximum=»1.5″ Minimum=»0.5″ Value=»1″ VerticalAlignment=»Center» HorizontalAlignment=»Center»/>
                <Button x:Name=»btnPrev» Content=» &lt; » VerticalAlignment=»Center» FontFamily=»Verdana»/>
                <Button x:Name=»btnNext» Content=» &gt; » VerticalAlignment=»Center» FontFamily=»Verdana» Margin=»5,0,0,0″/>
            </StackPanel>
        </Grid>
    </Grid>
</UserControl>

Blend — отличный инструмент для создания красивых дизайнов и анимации. Вы даже можете написать весь код в Blend, но я предпочитаю использовать Visual Studio, поскольку он более мощный, имеет отладчик и лучший IntelliSense для предложений и автозаполнения.

Во второй части этого руководства мы напишем весь код для наших двух пользовательских элементов управления в C #, а также наш собственный веб-сервис, который переносит каждое изображение из определенной папки в наше представление на стене.

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

Спасибо за прочтение!


30-дневная пробная версия Blend
Введение в Microsoft Silverlight 4 — смесь