Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Рисование фигур



Фигуры представляют собой один из основных элементов WPF. С их помощью можно рисовать двумерную графику, используя прямоугольники, линии, многоугольники и ломанные линии. Все эти фигуры представлены соответствующими классами, унаследованными от абстрактного класса Shape, определенными в пространстве имен System.Windows.Shapes. Рассмотрим пример применения XAML, в котором рисуется рожица с ножками, состоящая из лица в виде окружности, двух эллипсов, изображающих глаз, кривой линии рта и четырех отрезков прямых линий, изображающих ноги.

<Window x:Class="WpfApplication2.Window1"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

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

Title="Wpf Sample" Height="300" Width="300">

<Grid>

<Grid.RowDefinitions>

<RowDefinition Height="42*" />

<RowDefinition Height="220*" />

</Grid.RowDefinitions>

<Button HorizontalAlignment="Left" Margin="38,9,0,10" Name="button1" Width="75">

Button

</Button>

<Button HorizontalAlignment="Right" Margin="0,10,44,8" Name="button2" Width="75">

Button

</Button>

<Canvas>

<Ellipse Canvas.Left="50" Canvas.Top="50" Width="100" Height="100" Stroke="Blue"

StrokeThickness="4" Fill="Yellow" />

<Ellipse Canvas.Left="60" Canvas.Top="65" Width="25" Height="25" Stroke="Blue"

StrokeThickness="3" Fill="White" />

<Ellipse Canvas.Left="70" Canvas.Top="75" Width="5" Height="5" Stroke="Blue"

StrokeThickness="3" Fill="White" />

<Path Name="Mouth" Stroke="Blue" StrokeThickness="4"

Data="M 62, 125 Q 95,122 102, 108"/>

<Line X1="124" X2="132" Y1="144" Y2="166" Stroke="Blue" StrokeThickness="4" />

<Line X1="114" X2="133" Y1="169" Y2="166" Stroke="Blue" StrokeThickness="4" />

<Line X1="92" X2="82" Y1="146" Y2="168" Stroke="Blue" StrokeThickness="4" />

<Line X1="68" X2="83" Y1="160" Y2="168" Stroke="Blue" StrokeThickness="4" />

</Canvas>

</Grid>

</Window>

В процессе формирования каждой строчки кода обращайте внимание на то, что происходит с изображением лица в дизайнере формы. После завершения формирования кода XAML можно увидеть конечный результат, представленный на рис.1.


Рис.1. Внешний вид дизайнера формы.

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

<Canvas.LayoutTransform>

<ScaleTransform ScaleX="1.5" ScaleY="1.5" />

</Canvas.LayoutTransform>

1.5. Особенности использования технологии WPF.

1.5.1. Еще раз о технологии WPF.

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

<Window x:Class="WindowsAppiication1.Window1"

Префикс пространства имен х помещает атрибут Class в пространство имен XAML, что означает более общую часть языка XAML. Фактически атрибут Class сообщает анализатору XAML, чтобы он сгенерировал новый класс с указанным именем. Этот класс наследуется от класса, именованного элементом XML. Другими словами, в этом примере создается новый класс по имени Window1, который наследуется от базового класса Window.

Класс Window1 генерируется автоматически во время компиляции. И здесь начинается самое интересное. Вы можете предоставить часть класса Window1, которая будет объединена с автоматически сгенерированной частью этого класса. Специфицированная вами часть — блестящий контейнер для вашего кода обработки событий.

На заметку! Это волшебство возможно благодаря средству С#, известному под названием частичных классов. Частичные классы позволяют разделить класс на две или более отдельных части во время разработки, которые соединяются вместе в компилированной сборке. Частичные классы могут быть использованы во многих сценариях управления кодом, но более всего удобны, когда ваш код должен объединяться с файлом, сгенерированным дизайнером.

Среда Visual Studio помогает вам за счет автоматического создания частичного класса, куда вы можете поместить свой код обработки событий. Например, если вы создаете приложение по имени WindowsApplication, содержащее окно по имени Windowl (как и в предыдущем примере), то Visual Studio начнет с создания следующего базового каркаса класса:

namespace windowsApplication1

{

/// <summary>

/// interaction logic for Windowl.xaml

/// </summary>

public partial class Window1: Window

{

public Window1() { InitializeComponent (); }

}

}

Когда вы компилируете ваше приложение, то текст на языке XAML, определяющий ваш пользовательский интерфейс (такой как Window1.xaml) транслируется в объявление типа CLR, объединенного с логикой вашего файла класса отделенного кода (подобного Window1.xaml.cs), формируя один общий модуль.

1.5.2. Метод InitializeComponent ()

В данный момент класс Window1 не содержит никакой реальной функциональности. Однако он включает одну важную деталь — конструктор по умолчанию, который вызывает InitializeComponent (), когда вы создаете экземпляр класса.

На заметку! InitializeComponent () играет ключевую роль в приложениях WPF. По этой

причине вы никогда не должны удалять вызов InitializeComponent() из конструктора вашего окна. Аналогично, если вы добавите другой конструктор, предусмотрите в нем вызов InitializeComponent().

Метод InitializeComponent () не видим в вашем исходном коде, потому что генерируется автоматически при компиляции вашего приложения. По существу все, что делает InitializeComponent () — это вызов метода LoadComponent () класса System.Windows.Application. Метод LoadComponent () извлекает код BAML (компилированный текст на языке XAML) из вашей сборки и использует его для построения вашего пользовательского интерфейса. При разборе BAML он создает объекты каждого элемента управления, устанавливает их свойства и прикрепляет все обработчики событий.

На заметку! Если вам не терпится, загляните в конец главы. Там, в разделе "Код и компилированный XAML" вы найдете код автоматически сгенерированного метода InitializeComponent ().





Дата публикования: 2015-10-09; Прочитано: 779 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.047 с)...