Основные фигуры SVG – графики
Вертикальный порядок последовательности объектов
До этого момента мы рассматривали XAML – документы, содержащие один объект. При расположении нескольких объектов в одном документе важен их вертикальный порядок ( z–order ). Представим себе, что у нас есть код, в котором создаются прямоугольник ( Rectangle ), полигон ( Polygon ) и эллипс ( Ellipse ):
<Rectangle Width="180" Height="80" Canvas.Left="10" Canvas.Top="10" Fill="green"/> <Polygon Points="20,20 180,20 20,90" Fill="blue" /> <Ellipse Width="50" Height="50" Canvas.Left="65" Canvas.Top="35" Fill="red" />
Строка кода, описывающая эллипс, располагается самой последней. На рисунке эти фигуры будут располагаться в обратном порядке – так, окружность будет самой первой в стопке объектов (рис. 2.8):
Можно сделать простой вывод – фрагмент кода, представляющий какой-либо объект, добавленный позже всех, графически будет располагаться выше всех. В табл. 2.6 приводится несколько простых примеров, содержащих последовательности элементов.
| № | Код | Вид в браузере |
|---|---|---|
| 2.6.1 | ||
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="200" Height="100"
Background="White"
x:Name="Page">
<Rectangle Width="180" Height="80"
Canvas.Left="10" Canvas.Top="10"
Fill="green"/>
<Polygon Points="20,20 180,20 20,90"
Fill="blue" />
<Ellipse Width="50" Height="50"
Canvas.Left="65" Canvas.Top="35"
Fill="red" />
</Canvas> |
||
| Описание | ||
| Последовательность трех фигур – прямоугольника, полигона и окружности | ||
| № | Код | Вид в браузере |
| 2.6.2 | ||
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="200" Height="100"
Background="White"
x:Name="Page">
<Ellipse Width="50" Height="50"
Canvas.Left="20" Canvas.Top="19"
troke="darkblue" StrokeThickness="4" />
<Ellipse Width="50" Height="50"
Canvas.Left="75" Canvas.Top="19"
Stroke="black" StrokeThickness="4" />
<Ellipse Width="50" Height="50"
Canvas.Left="130" Canvas.Top="19"
Stroke="red" StrokeThickness="4" />
<Ellipse Width="50" Height="50"
Canvas.Left="47" Canvas.Top="42"
Stroke="yellow" StrokeThickness="4" />
<Ellipse Width="50" Height="50"
Canvas.Left="102" Canvas.Top="42"
Stroke="green" StrokeThickness="4" />
</Canvas> |
||
| Описание | ||
| Эмблема олимпийского движения. Следует обратить внимание на перекрытие колец | ||
| № | Код | Вид в браузере |
| 2.6.3 | ||
<Canvas
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="200" Height="100"
Background="White"
x:Name="Page">
<!-- Небо -->
<Rectangle Width="200" Height="70"
Canvas.Left="0" Canvas.Top="0" Fill="skyblue"/>
<!--Кольца радуги -->
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="20"
Stroke="red" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="24"
Stroke="orange" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="28"
Stroke="yellow" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="32"
Stroke="green" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="36"
Stroke="deepskyblue" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="40"
Stroke="blue" StrokeThickness="4" />
<Ellipse Width="210" Height="120"
Canvas.Left="-5" Canvas.Top="44"
Stroke="purple" StrokeThickness="4" />
<!--Солнце -->
<Ellipse Width="20" Height="20"
Canvas.Left="2" Canvas.Top="2"
Fill="orangered" />
<!--Лучи солнца -->
<Line X1="12" Y1="12"
X2="12" Y2="40" Stroke="orangered"
StrokeThickness="2"/>
<Line X1="12" Y1="12"
X2="40" Y2="12" Stroke="orangered"
StrokeThickness="2"/>
<Line X1="12" Y1="12"
X2="30" Y2="30" Stroke="orangered"
StrokeThickness="2"/>
<!--Земля-->
<Rectangle Width="200" Height="30"
Canvas.Left="0" Canvas.Top="70"
Fill="lightgreen"/>
<!--Убираем выступающие части радуги-->
<Rectangle Width="210" Height="70"
Canvas.Left="0" Canvas.Top="100"
Fill="white"/>
<Rectangle Width="200" Height="100"
Canvas.Left="200" Canvas.Top="0"
Fill="white"/>
</Canvas> |
||
| Описание | ||
| Простой пейзаж. Здесь уже становится сложно следить за блоками кода, отражающими разные объекты, поэтому были добавлены комментарии | ||
Стили в WPF
Всякий раз при добавлении фигуры мы определяли ее заливку, цвет контура и его толщину. А можно ли один раз описать эти свойства, а затем много раз применять их для множества фигур? XAML поддерживает стили, подобные обычным CSS-таблицам. Но реализация поддержки стилей различна для WPF-приложений и Silverlight-сайтов – по крайней мере, на момент написания этого курса. Для начала рассмотрим стили в WPF, поскольку их проще понять.
Первое, что нужно сделать – это открыть справку к редактору Microsoft Expression Blend и посмотреть раздел "Styles and templates" (рис. 2.9):
В этом разделе описываются визуальные средства редактора, позволяющие создавать стили. После знакомства с ними приступим к изучению кода. Это обычный код, содержащий прямоугольник:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="Style_in_WPF.Window1" x:Name="Window" Title="Window1" Width="640" Height="480"> <Grid x:Name="LayoutRoot"> <Rectangle Stroke="red" StrokeThickness="2" Fill="skyblue" Width="100" Height="30" Margin="0,0,0,0" /> </Grid> </Window>
При запуске приложения фигура появляется на форме (рис. 2.10):
Добавим описание стиля фигуры, применим это описание к исходному прямоугольнику и его двум копиям:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Style_in_WPF.Window1"
x:Name="Window"
Title="Window1"
Width="640" Height="480"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Window.Resources>
<Style
x:Key="MyStyle" TargetType="{x:Type Rectangle}">
<Setter
Property="Stroke"
Value="Red" />
<Setter
Property="StrokeThickness"
Value="2" />
<Setter
Property="Fill"
Value="skyblue" />
</Style>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Rectangle Style = "{StaticResource MyStyle}"
Width="100" Height="30"
Margin="0,-100,0,0" />
<Rectangle Style = "{StaticResource MyStyle}"
Width="100" Height="30"
Margin="0,0,0,0" />
<Rectangle Style = "{StaticResource MyStyle}"
Width="100" Height="30"
Margin="0,100,0,0" />
</Grid>
</Window>В результате на форму выводится три одинаковых фигуры (рис. 2.11):
Тег Style помещается внутри секции Window.Resources. С помощью атрибута x:Key определяется имя стиля, а атрибут TargetType задает тип элемента, к которому этот стиль будет применяться. Внутри тега Setter описываются пары "Свойство – значение". Для применения готового стиля к фигуре указывается атрибут Style внутри описания элемента.






