Технология Silverlight: использование XML для разметки и отображения документа

Silverlight – новая технология компании Microsoft, которая, как иногда говорят, позволяет создать не web-приложение, а web-впечатление. Основа этой технологии – программный интерфейс, похожий не интерфейс обычных оконных приложений. Дизайн приложения определяется с помощью нового языка – XAMP (XML Application Markup Language). Разметку можно создать «руками» или с помощью специального программного обеспечения (расширение Microsoft Visual Studio 2008 или Microsoft Expression). Silverlight – это подключаемый модуль для браузера, формирующий визуальное представление XAMP и предоставляющий программный интерфейс.

XAMP – это язык разметки на базе XML, используемый для определения визуальных элементов приложения – графические элементы, анимации, мультимедиа, элементы управления и пр. Корнем XAMP-документа является элемент-контейнер (Canvas), определяющий область отрисовки пользовательского интерфейса. Например,

<Canvas xmlns="http://schemas. /client/2007"

xmlns:x="http://schemas. /winfx/2006/xaml"

Width="640" Height="480"

Background="Black">

<Rectangle Fill="#FFFFFFFF" Stroke="#FF000000" Width="136" Height="80"

Canvas. Left="120" Canvas. Top="240"/>

<Canvas>

<Rectangle Fill="#FFFFFFFF" Stroke="#FF000000" Width="104"

Height="96" Canvas. Left="400" Canvas. Top="320"/>

НЕ нашли? Не то? Что вы ищете?

<Canvas Width="320" Height="104" Canvas. Left="96" Canvas. Top="64">

<Rectangle Fill="#FFFFFFFF" Stroke="#FF000000" Width="120"

Height="96"/>

<Rectangle Fill="#FFFFFFFF" Stroke="#FF000000" Width="168"

Height="96" Canvas. Left="152" Canvas. Top="8"/>

</Canvas>

</Canvas>

</Canvas>

XAMP может использовать различные кисти – сплошные, градиентной заливки, заливки по шаблону и пр.

Существует возможность трансформации объектов (поворотов, наклонов и пр.) и введения анимаций.

Рассмотрим различные примеры создания рисунков с помощью XAMP.

Пример 1. Прямоугольники на различных слоях.

<?xml version="1.0" encoding="utf-8"?>

<Canvas xmlns="http://schemas. /winfx/2006/xaml/presentation"

xmlns:x="http://schemas. /winfx/2006/xaml" x:Name="Document">

<Rectangle Canvas. ZIndex="2" Fill="Red" Width="200" Height="128"

Canvas. Left="8" Canvas. Top="8"/>

<Rectangle Canvas. ZIndex="1" Fill="Black" Width="280" Height="80"

Canvas. Left="40" Canvas. Top="32"/>

</Canvas>

Пример 2. Демонстрация различных видов заливки прямоугольников.

·  Линейная градиентная заливка. Градиент описывается с помощью нормированного прямоугольника (левый верхний угол – (0,0), правый нижний – (1,1)). Точки градиента определяют цвета, относительно которых осуществляется плавный переход цвета. Стандартное направление градиента – слева направо, сверху вниз.

<Rectangle Width="40" Height="40" Canvas. Left="8" Canvas. Top="8">

<Rectangle. Fill>

<LinearGradientBrush>

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="1"/>

</LinearGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Линейная градиентная заливка с другим направлением определяется с помощью атрибутов StartPoint и EndPoint.

<Rectangle Width="40" Height="40" Canvas. Left="8" Canvas. Top="8">

<Rectangle. Fill>

<LinearGradientBrush StartPoint="0,1" EndPoint="1,0" >

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="1"/>

</LinearGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Линейная градиентная заливка с большим количеством точек градиента.

<Rectangle Width="40" Height="40" Canvas. Left="100" Canvas. Top="8">

<Rectangle. Fill>

<LinearGradientBrush StartPoint="0,1" EndPoint="1,0">

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="0.2"/>

<GradientStop Color="#ff000000" Offset="1"/>

</LinearGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Радиальная градиентная заливка определяет круговой градиент заливки от центра (точка 0) до внешнего края (точка 1).

<Rectangle Width="40" Height="40" Canvas. Left="150" Canvas. Top="8">

<Rectangle. Fill>

<RadialGradientBrush>

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="1"/>

</RadialGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Радиальная градиентная заливка со смещенным фокусом (центром, от которого идет заливка) определяется с помощью атрибута GradientOrigin.

<Rectangle Width="40" Height="40" Canvas. Left="200" Canvas. Top="8">

<Rectangle. Fill>

<RadialGradientBrush GradientOrigin="0.7,0.2">

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="1"/>

</RadialGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Радиальная градиентная заливка с указанием радиуса и метода распространения.

<Rectangle Width="40" Height="40" Canvas. Left="250" Canvas. Top="8">

<Rectangle. Fill>

<RadialGradientBrush SpreadMethod="Repeat" RadiusX="0.1" RadiusY="0.2">

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="1"/>

</RadialGradientBrush>

</Rectangle. Fill>

</Rectangle>

·  Заливка из файла с изображением.

<Rectangle Width="40" Height="40" Canvas. Left="300" Canvas. Top="8">

<Rectangle. Fill>

<ImageBrush ImageSource="Пузыри. bmp"/>

</Rectangle. Fill>

</Rectangle></Canvas>

Пример 3. Демонстрация различных видов контуров прямоугольников. Контур также может различными способами быть закрашен. Обычно определяют его толщину (StrokeThickness), при пунктирном контуре задают размеры (StrokeDashArray), определение наконечника (StrokeDashCap – Flat, Round, Square, Triangle), тип соединения линий (StrokeLineJoin – Bevel, Miter, Round).

<Rectangle StrokeThickness="10" Fill="#aa000000" Cursor="Hand" Width="200" Height="128" Canvas. Left="8" Canvas. Top="8">

<Rectangle. Stroke>

<LinearGradientBrush StartPoint="0,1" EndPoint="1,0">

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="0.2"/>

<GradientStop Color="#ff000000" Offset="1"/>

</LinearGradientBrush>

</Rectangle. Stroke>

</Rectangle>

<Rectangle StrokeThickness="10" StrokeDashArray="4,1,2,1" StrokeLineJoin="Bevel" StrokeDashCap="Round" Fill="#aa000000" Cursor="Hand" Width="200" Height="128" Canvas. Left="8" Canvas. Top="8">

<Rectangle. Stroke>

<LinearGradientBrush StartPoint="0,1" EndPoint="1,0">

<GradientStop Color="#ff000000" Offset="0"/>

<GradientStop Color="#ffffffff" Offset="0.2"/>

<GradientStop Color="#ff000000" Offset="1"/>

</LinearGradientBrush>

</Rectangle. Stroke>

</Rectangle>

Пример 4. Демонстрация различных видов фигур – поддерживаются Ellipse, Rectangle, Line, Path, Polygon, Polyline.

<Path Stroke="Black">

<Path. Data>

<GeometryGroup>

<EllipseGeometry RadiusX="100" RadiusY="100" Center="50,50"/>

<LineGeometry StartPoint="10,10" EndPoint="70,70"/>

</GeometryGroup>

</Path. Data>

</Path>

Пример 5. Демонстрация применения транформаций – RotateTransform (поворот на заданный угол относительно центральной точки), ScaleTransform (изменение размера объекта по горизонтали, вертикали или в обоих направлениях), TranslateTransform (перемещение), SkewTransform (наклон). Может использоваться для создания трехмерных изображений.

<TextBlock Width="320" Height="40" Text="Это просто текст">

<TextBlock. RenderTransform>

<RotateTransform Angle="45" CenterX="100" CenterY="400" />

</TextBlock. RenderTransform>

</TextBlock>

<Rectangle Fill="red" Stroke="Black" Width="88" Height="88"

Canvas. Left="80" Canvas. Top="80">

<Rectangle. RenderTransform>

<SkewTransform AngleX="45"/>

</Rectangle. RenderTransform>

</Rectangle>

<Rectangle Fill="red" Stroke="Black" Width="88" Height="88"

Canvas. Left="80" Canvas. Top="168">

<Rectangle. RenderTransform>

<SkewTransform AngleX="45"/>

</Rectangle. RenderTransform>

</Rectangle>

<Rectangle Fill="red" Stroke="Black" Width="88" Height="88"

Canvas. Left="80" Canvas. Top="80">

<Rectangle. RenderTransform>

<SkewTransform AngleY="45"/>

</Rectangle. RenderTransform>

</Rectangle>

Пример 6. Демонстрация применения анимации цвета и положения фигур

<Rectangle x:Name="rect" Fill="Red" Canvas. Left="10" Canvas. Top="10"

Width="50" Height="50">

<Rectangle. Triggers>

<EventTrigger RoutedEvent="Rectangle. Loaded">

<BeginStoryboard>

<Storyboard>

<ColorAnimation Storyboard. TargetName="rect"

Storyboard. TargetProperty="(Shape. Fill).(SolidColorBrush. Color)"

To="yellow" Duration="0:0:10"/>

<DoubleAnimation Storyboard. TargetName="rect"

Storyboard. TargetProperty="(Canvas. Left)" Duration="0:0:5"

To="500" BeginTime="0:0:3" RepeatBehavior="3x"/>

</Storyboard>

</BeginStoryboard>

</EventTrigger>

</Rectangle. Triggers>

</Rectangle>

Пример 7. Элементами XAMP-файла могут быть и элементы управления:

<?xml version="1.0" encoding="utf-8"?>

<Canvas xmlns="http://schemas. /winfx/2006/xaml/presentation"

xmlns:x="http://schemas. /winfx/2006/xaml" x:Name="Document">

<ScrollViewer>

<StackPanel Canvas. Left="10" Canvas. Top="50">

<Button x:Name="b1" ClickMode="Hover" Content="Button1">

</Button>

<Button x:Name="b2" ClickMode="Press" Content="Button2"> </Button>

<Button x:Name="b3" ClickMode="Release" Content="Button3"> </Button>

<Button x:Name="b4" Width="100" Height="100">

<Canvas>

<Ellipse Fill="Green" Width="50" Height="50"></Ellipse>

<TextBlock Text="Hello"></TextBlock>

</Canvas>

</Button>

<ListBox x:Name="theList">

<ListBoxItem Content="элемент 1"/>

<ListBoxItem Content="элемент 2"/>

<ListBoxItem Content="элемент 3"/>

<ListBoxItem Content="элемент 4"/>

<ListBoxItem Content="элемент 5"/>

</ListBox>

<CheckBox IsThreeState="True" Content="Test1"></CheckBox>

<CheckBox IsThreeState="True">

<CheckBox. Content>

<StackPanel Orientation="Horizontal">

<TextBlock Text="The Caption"></TextBlock>

<Image Source="паркет. bmp"/>

</StackPanel>

</CheckBox. Content>

</CheckBox>

<StackPanel Orientation="Vertical" Background="Yellow">

<RadioButton Content="Option 1" IsChecked="true">

</RadioButton>

<RadioButton Content="Option 2"></RadioButton>

<RadioButton Content="Option 3"></RadioButton>

<RadioButton Content="Option 4"></RadioButton>

<StackPanel Orientation="Vertical" Background="White">

<RadioButton Content="Option 5" IsChecked="true"> </RadioButton>

<RadioButton Content="Option 6"></RadioButton>

<RadioButton Content="Option 7"></RadioButton>

<RadioButton Content="Option 8"></RadioButton>

</StackPanel>

</StackPanel>

<TextBlock Text="1234" FontFamily="Arial Black" FontSize="20"

FontStyle="Italic"></TextBlock>

<TextBlock Width="400" Text="My first text">

<LineBreak/>

<Run>My Second Text</Run>

<LineBreak/>

<Run>My Third Text</Run>

<LineBreak/>

<Run>My Fourth Text</Run>

</TextBlock>

<StackPanel>

<TextBox />

<TextBox />

</StackPanel>

</StackPanel>

</ScrollViewer>

</Canvas>