Знакомство с XAML
Дополнительные материалы к занятию можно скачать
здесь.
Вложенные файлы: Presentation_6.pptx
Вложенные папки: Lecture_6_1, Lecture_6_2, Lecture_6_3, Lecture_6_4, Lecture_6_5, Lecture_6_6, Lecture_6_7
XAML широко используется в .NET Framework 4.0, в особенности в Windows Presentation Foundation (WPF) и Windows Workflow Foundation (WF). В WPF XAML используется как язык разметки пользовательского интерфейса, для определения элементов пользовательского интерфейса, привязки данных, поддержки событий и др. свойств. В WF, при помощи XAML можно определять последовательности выполняемых действий (workflows).
XAML файлы можно создавать и редактировать при помощи инструментов визуального конструирования, таких как: Microsoft Expression Blend, Microsoft Visual Studio, WPF Visual Designer. Все созданное или реализованное в XAML может быть выражено при помощи более традиционных .NET языков, таких как: C# или Visual Basic.NET. Однако ключевым аспектом технологии является уменьшение сложности используемых для обработки XAML инструментов, так как XAML основан на XML. В результате чего, появляется множество продуктов, создающих основанные на XAML приложения. Поскольку XAML базируется на XML, у разработчиков и дизайнеров появилась возможность одновременно работать над содержимым без необходимости компиляции.
Рассмотрим несколько примеров использования Xaml.
9.1. Программирование двухмерной графики
Во-первых, с помощью языка расширенной разметки для приложений можно программировать двухмерную графику.
Пример 9.1. Изображение эллипса
Создаем проект Windows Presentation Foundation. Назовем проект Lecture_6_1.
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_6_1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Canvas>
<Ellipse Name="e1" Fill="AliceBlue" Stroke="BlueViolet" Width="200" Height="150"
Canvas.Left="20" Canvas.Top="30"></Ellipse>
</Canvas>
</Window>
Получаем следующий результат:
Документ MainPage.xaml является xml-документом с корневым элементом <Window…>. Приложения с таким корневым элементам являются типичными Windows-приложениями. Их широкое распространение началось с Windows Vista. Помимо Window существует также корневой элемент <Page…>. При его использовании можно добиться интересных результатов, например, можно разрабатывать приложения со страничной организацией (как в web-сайте).
Кстати сказать, результата похожего на пример 1 можно добиться, рисуя эллипс программно.
Пример 9.2. Программное рисование фигур
Создаем приложение WPF Lecture_6_2.
Код MainWindow.xaml:
<Window x:Class="Lecture_6_2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Canvas Name="c1"/>
</Grid>
</Window>
Код MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lecture_6_2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
CreateEllipse();
}
private void CreateEllipse()
{
// Создаем эллипс
Ellipse blueRectangle = new Ellipse();
blueRectangle.Height = 150;
blueRectangle.Width = 200;
// Создаем кисти
SolidColorBrush blueBrush = new SolidColorBrush();
blueBrush.Color = Colors.AliceBlue;
SolidColorBrush blackBrush = new SolidColorBrush();
blackBrush.Color = Colors.BlueViolet;
// Задаем цвет и ширину эллипса
blueRectangle.StrokeThickness = 1;
blueRectangle.Stroke = blackBrush;
// Fill rectangle with blue color
blueRectangle.Fill = blueBrush;
// Добавляем эллипс к холсту
c1.Children.Add(blueRectangle);
}
}
}
Листинг
.
Получаем следующий результат:
Пример 9.3. Знакомство с классом Geometry. Рисование эллипса
Большими возможностями обладает класс Geometry. С его помощью можно создавать сложную графику, например, можно объединять несколько объектов в один "путь" (Path). Но мы начнем с простого примера.
Создаем проект Lecture_6_3.
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_6_3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Path Fill="Gainsboro" Stroke="Blue">
<Path.Data>
<EllipseGeometry Center="50,90" RadiusX="30" RadiusY="80">
</EllipseGeometry>
</Path.Data>
</Path>
</Grid>
</Window>
Получаем следующий результат:
Пример 9.4. Изображение восьми спутников ГЛОНАСС, расположенных в одной из плоскостей
Создаем проект Lecture_6_4.
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_6_4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="650" Width="650">
<Canvas>
<Path Fill="Gainsboro" Stroke="Blue">
<Path.Data>
<GeometryGroup>
<EllipseGeometry Center="620,320" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="532,107" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="320,20" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="107,107" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="20,320" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="107,532" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="320,620" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="532,532" RadiusX="10" RadiusY="10"></EllipseGeometry>
</GeometryGroup>
</Path.Data>
</Path>
</Canvas>
</Window>
Получаем следующий результат:
В данном примере показана возможность объединения восьми эллипсов в один объект Path.
Пример 9.5. Изображение 24-х спутников ГЛОНАСС в одной плоскости
Создаем проект practice_6_5. Изображение 24-х спутников ГЛОНАСС
В следующем примере показаны в одной плоскости спутники системы ГЛОНАСС. Спутники на каждой плоскости сдвинуты на 15 градусов.
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_6_5.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="650" Width="650">
<Window.Resources>
<GeometryGroup x:Key="Geometry">
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10"></EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="45"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="90"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="135"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="180"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="225"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="270"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
<EllipseGeometry Center="580,300" RadiusX="10" RadiusY="10">
<EllipseGeometry.Transform>
<RotateTransform CenterX="300" CenterY="300" Angle="315"></RotateTransform>
</EllipseGeometry.Transform>
</EllipseGeometry>
</GeometryGroup>
</Window.Resources>
<Canvas>
<Path Fill="Red" Stroke="Black" Data="{StaticResource Geometry}">
</Path>
<Path Fill="Green" Stroke="Blue" Data="{StaticResource Geometry}">
<Path.RenderTransform>
<RotateTransform CenterX="300" CenterY="300" Angle="15"></RotateTransform>
</Path.RenderTransform>
</Path>
<Path Fill="Blue" Stroke="Blue" Data="{StaticResource Geometry}">
<Path.RenderTransform>
<RotateTransform CenterX="300" CenterY="300" Angle="30"></RotateTransform>
</Path.RenderTransform>
</Path>
</Canvas>
</Window>
Листинг
.
Получаем следующий результат:
В примере показана возможность использования ресурсов. Первые восемь спутников, обозначенных эллипсами, помещаются в ресурс, потом этот ресурс дважды смещается на разные углы.
Пример 9.6. Элемент управлениям InkCanvas
В данной работе мы познакомимся с элементом управления, позволяющим рисовать.
Создаем проект Lecture_6_6.
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_6_6.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<InkCanvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"/>
</Grid>
</Window>
Получаем следующий результат:






