Основные фигуры SVG – графики
Группы элементов в Silverlight
Графика XAML содержит средства для объединения нескольких элементов в одну фигуру, для которой можно задавать единые атрибуты, название, стили и т.д. Рассмотрим следующий код:
<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="skyblue" Stroke="blue" StrokeThickness="2"/> <Ellipse Width="50" Height="50" Canvas.Left="75" Canvas.Top="25" Fill="skyblue" Stroke="blue" StrokeThickness="2" /> </Canvas>
В браузере отображается эллипс, наложенный на прямоугольник (рис. 2.17):
Прямоугольник и эллипс представляют собой совершенно независимые фигуры – для каждой из которых нужно задавать атрибуты Fill, Stroke и StrokeThickness. Для формирования фигуры используется следующий код:
<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">
<Path Fill="skyblue" Stroke="blue"
StrokeThickness="2">
<Path.Data>
<GeometryGroup FillRule="NonZero">
<EllipseGeometry Center="100,50"
RadiusX="25" RadiusY="25" />
<RectangleGeometry Rect="10,10 180 80" />
</GeometryGroup>
</Path.Data>
</Path>
</Canvas>Все содержимое располагается внутри тега Path. Изучением элемента Path мы будем заниматься в следующей лекции. Пока его можно рассматривать как некоторый контейнер, внутри которого располагается код других элементов. Заметим, что свойства контейнера применяются для всех объектов. В браузере фигуры выглядят точно также. Теги элементов Ellipse и Rectangle трансформировались в EllipseGeometry и RectangleGeometry.
Пакет Microsoft Expression Blend позволяет увидеть еще один способ группировки элементов. В визуальном режиме выделяем исходные элементы, в главном меню выбираем пункт "Object \ Group Into \ Canvas" (рис. 2.18):
В результате выполнения этого действия элементы помещаются внутри дополнительного тега Canvas:
<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">
<Canvas Width="180" Height="80"
Canvas.Left="10" Canvas.Top="10">
<Rectangle Width="180" Height="80"
Fill="skyblue" Stroke="blue"
StrokeThickness="2"/>
<Ellipse Width="50" Height="50"
Fill="skyblue" Stroke="blue"
StrokeThickness="2" Canvas.Left="65"
Canvas.Top="15" />
</Canvas>
</Canvas>Еще один способ объединения фигур, предлагаемый пакетом Microsoft Expression Blend, содержит средства формирования новых фигур. Например, выделим исходные элементы и выберем пункт меню "Object \ Combine \ Exclude Overlap" (рис. 2.19):
В результате выполнения этого действия мы получаем прямоугольник с "дыркой" (рис. 2.20):
Среда преобразовала исходные элементы в объект Path, содержащий множество координат:
<Canvas xmlns="http://schemas.microsoft.com/client/2007" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" Height="100" Background="Yellow" x:Name="Page"> <Path Width="180" Height="80" Fill="skyblue" Stretch="Fill" Stroke="blue" StrokeThickness="2" Canvas.Left="10" Canvas.Top="10" Data="M90,16.000001 C76.745166,16.000001 66,26.745167 66,40.000001 66,53.254834 76.745166,64.000001 90,64.000001 C103.25483,64.000001 114,53.254834 114,40.000001 C114,26.745167 103.25483,16.000001 90,16.000001 z M1,1 L179,1 179,79.000001 1,79.000001 1,1 z"/> </Canvas>
Подобный код трудно понимать без визуальных средств.



