19
Темы лекции: WPF. Практическое задание: WPF. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 10

C# Desktop. Занятие 10

Embed Size (px)

Citation preview

Page 1: C# Desktop. Занятие 10

Темы лекции: WPF.

Практическое задание: WPF.

Тренер: Игорь Шкулипа, к.т.н.

Платформа .Net и язык программирования C#.

Занятие 10

Page 2: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 2

WPF

Windows Presentation Foundation (WPF) ― это система следующегопоколения для построения клиентских приложений Windows свизуально привлекательными возможностями взаимодействия спользователем. С помощью WPF можно создавать широкий спектр какавтономных, так и размещенных в браузере приложений.

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

Язык XAML (Extensible Application Markup Language) создан дляуправления элементами управления, привязкой данных, макетом,двухмерной и трехмерной графикой, анимацией, стилями, шаблонами,документами, мультимедиа, текстом и оформлением.

WPF входит в состав Microsoft .NET Framework и позволяет создаватьприложения, включающие другие элементы библиотеки классов .NETFramework.

Page 3: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 3

Общие сведения о WPF

WPF существует в качестве подмножества типов .NET Framework, которыезанимают большую часть в пространстве имен System.Windows.

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

Page 4: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 4

Разметка

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

<Window x:Class="WpfApplication1.MainWindow"

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

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

Title="MainWindow" Height="170.27" Width="266.441">

<Grid HorizontalAlignment="Left" Height="131" VerticalAlignment="Top"

Width="254" Margin="0,0,0,-6">

<TextBox HorizontalAlignment="Left" Height="40" TextWrapping="Wrap"

Text="TextBox" VerticalAlignment="Top" Width="258"/>

<Button Content="Button" HorizontalAlignment="Left"

Margin="10,45,0,0" VerticalAlignment="Top" Width="234"

RenderTransformOrigin="0.178,0.499" Height="76"/>

</Grid>

</Window>

Page 5: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 5

Язык XAML

XAML — это декларативный язык разметки. С точки зрения моделипрограммирования .NET Framework язык XAML упрощает созданиепользовательского интерфейса для приложения .NET Framework. Можно создатьвидимые элементы пользовательского интерфейса в декларативной разметкеXAML, а затем отделить определение пользовательского интерфейса от логикивремени выполнения, используя файлы кода программной части,присоединенные к разметке с помощью определений разделяемых классов. ЯзыкXAML напрямую представляет создание экземпляров объектов в конкретномнаборе резервных типов, определенных в сборках. В этом заключается егоотличие от большинства других языков разметки, которые, как правило,представляют собой интерпретируемые языки без прямой связи с системойрезервных типов.

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

При представлении в виде текста файлы XAML являются XML-файлами, которыеобычно имеют расширение .xaml. Файлы можно сохранять в любой кодировке,поддерживаемой XML, но обычно используется кодировка UTF-8.

<StackPanel>

<Button Content="Click Me"/>

</StackPanel>

Page 6: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 6

XAML

Синтаксис языка XAML основан преимущественно на XML. Согласноопределению, допустимый код XAML должен быть допустимым кодомXML. Однако некоторые синтаксические принципы XAML имеют другое,более сложное значение, будучи допустимыми в XML черезспецификацию XML 1.0. Например, XAML поддерживает синтаксиссвойства элемента, при котором значения свойства могут бытьустановлены через элементы, а не через строковые значенияатрибутов или содержимого. Для XML этот синтаксис свойстваэлемента просто был бы сочтен элементом, в имени которого естьточка.

Visual Studio помогает соблюдать правила синтаксиса XAML как втекстовом редакторе языка XAML, так и в рабочей областиконструирования XAML.

Page 7: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 7

Пространства имен XAMLС помощью пространств имен в программной инфраструктуре можно отделить

идентификаторы, объявленные пользователем, от идентификаторов, объявленныхсамой инфраструктурой, устранить неоднозначность идентификаторов, используяпрефиксы пространства имен, и т. д. В языке XAML эту функцию выполняетсобственная концепция пространства имен XAML. Вот как в языке XAML применяется иразвивается концепция пространств имен XML.

• Для объявления пространств имен используется зарезервированный атрибутпространства имен по умолчанию xmlns, и значением этого атрибута являетсяуниверсальный код ресурса (URI).

• Пространства имен не по умолчанию объявляются в XAML с назначением импрефиксов; использование префиксов в элементах и атрибутах рассматриваетсякак техника ссылки на соответствующее пространство имен.

• Если атрибут "xmlns" не указан, в языке XAML применяется концепцияпространства имен по умолчанию. Пространство имен по умолчанию может неявляться пространством имен по умолчанию на языке XML и может бытьопределено различными способами для каждой программной архитектуры XAML.

• Определения пространств имен в XML-документе наследуются от родительскогоэлемента к дочернему.

• Атрибуты элемента наследуют пространства имен элемента, поэтому префиксы ватрибутах обычно не используются.

В корневом элементе XAML-файла всегда объявляется пространство имен XAML поумолчанию. Пространство имен XAML по умолчанию определяет, какие элементы могутбыть объявлены без указания уточняющего префикса.

Page 8: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 8

Собственное пространство имен языка XAML

Среди пространств имен XAML можно выделить одно, которое объявляется почти вкаждом файле XAML среды выполнения Windows, — это пространство имен дляэлементов, которые определены в языке XAML. По соглашению собственноепространство имен языка XAML сопоставляется с префиксом "x".

Префикс "x" (собственное пространство имен языка XAML) содержит несколькопрограммных конструкций, которые часто используются в XAML-коде.

x:Key

Задает определяемый пользователем уникальный ключ для каждого ресурса в ResourceDictionary. Строка токена ключа является аргументом расширения разметки StaticResource, с помощью которого можно получить любой такой ресурс из другого использования XAML.

x:Class

Определяет пространство имен и имя класса для кода, предоставляющего XAML-страницу с выделенным кодом. Эта конструкция называет класс, созданный или присоединенный при выполнении построения и поддерживающий компилятор разметки XAML при компиляции приложения. Необходимо иметь такой класс для поддержки выделенного кода или же инициализировать XAML-содержимое как Window.Content в стандартной модели активации приложения.

x:Name

Задает имя экземпляра объекта времени выполнения, созданного в исполняемом коде по итогам обработки элемента, который определяет этот объект в XAML-коде. Можно использовать x:Name для идентификации элемента, что может быть полезно в случае, если FrameworkElement.Name не поддерживается этим типом элемента. Включение x:Name в код XAML можно рассматривать как объявление именованных переменных в коде, и, как будет описано дальше, это именно то, что происходит при загрузке XAML в качестве компонента приложения среды выполнения Windows.

Директива x:UidОпределяет элементы, которые должны использовать локализованные ресурсы для некоторых значений их свойств.

Page 9: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 9

Расширения разметки

Расширения разметки — это структура языка XAML, которую часто использует реализацияXAML в среде выполнения Windows. В синтаксисе атрибутов XAML фигурные скобки "{" и"}" обозначают использование расширения разметки XAML. Они предписываютсинтаксическому анализатору XAML отклониться от общей процедуры обработкизначений атрибутов как строковых литералов или значений, напрямую преобразуемых встроки. Вместо этого средство синтаксического анализа языка XAML вызывает код, накоторый опирается данное расширение разметки, и предоставляет альтернативныйрезультат в виде объекта или поведения. Расширения разметки могут иметь аргументы,содержащиеся также внутри фигурных скобок.

Реализация XAML в среде выполнения Windows использует следующие расширенияразметки, которые определены в пространстве имен XAML по умолчанию и распознаютсясинтаксическим анализатором XAML среды выполнения Windows:

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

• StaticResource: поддерживает ссылку на значения ресурсов, определенные вResourceDictionary, которые могут находиться в другом XAML-файле, но которые, вконечном счете, средство синтаксического анализа должно находить во времязагрузки. Аргумент использования {StaticResource} должен определять ключ дляресурса с ключом в ResourceDictionary.

• TemplateBinding: особый случай Binding, который поддерживает шаблоныэлемента управления в XAML и их возможное использование во время выполнения.

• RelativeSource: делает возможной определенную форму привязки шаблонов.

Page 10: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 10

События

XAML — декларативный язык для объявления объектов и их свойств, ноон также содержит синтаксические средства для назначенияобработчиков событий объектам в разметке.

Синтаксис событий XAML позволяет затем интегрировать объявленные вXAML-коде события через модель программирования приложенийсреды выполнения Windows. Имя события задается как имя атрибутаобъекта, в котором обрабатывается событие.

В качестве значения атрибута указывается имя функции обработчикасобытий, которая определяется в коде.

Обработчик XAML использует это имя для создания представленияделегирования в загруженном дереве объектов и добавляет указанныйобработчик во внутренний список обработчиков.

Page 11: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 11

Перенаправленные события

Перенаправленное событие — это тип события, который может вызыватьобработчики для нескольких прослушивателей в элементе дерева, а нетолько для объекта, вызвавшего событие.

Перенаправленное событие — это событие CLR, которое резервируетсяэкземпляром класса RoutedEvent и обрабатывается в системе событийWindows Presentation Foundation (WPF).

Обычно в приложении WPF содержится много элементов. В зависимостиот того, созданы элементы в коде или объявлены в XAML, они связаныв дереве элементов друг с другом. Маршрут события может проходитьв одном из двух направлений в зависимости от определения события,но обычно маршрут проходит от исходного элемента и затем"всплывает" вверх по дереву элементов до тех пор, пока не достигнеткорневого элемента дерева (как правило, страница или окно).

Page 12: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 12

Пример разметки

Page 13: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 13

Код основного окна

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

namespace WpfApplication1

{

/// <summary>

/// Логика взаимодействия для MainWindow.xaml

/// </summary>

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private void Button_Click_1(object sender, RoutedEventArgs e)

{

textBox1.Text = "Hello, World WPF!";

}

}

}

Page 14: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 14

Связывание данныхПростейший способ привязки данных подразумевает ситуацию, когда

исходным объектом является элемент WPF, а исходным свойством —свойство зависимости.

Свойство зависимости имеет встроенную поддержку уведомлений обизменениях. В результате, когда значение свойства зависимостиизменяется в исходном объекте, привязанное свойство целевогообъекта немедленно обновляется.

<Window x:Class="WpfApplication1.MainWindow"

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

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

Title="MainWindow" Height="350" Width="278.003">

<Grid HorizontalAlignment="Left" Height="321" VerticalAlignment="Top" Width="268"

Margin="0,0,0,-1">

<Slider x:Name="fontResizer" HorizontalAlignment="Left" Margin="26,32,0,0"

VerticalAlignment="Top" Width="214" Maximum="72" Minimum="10" TickFrequency="5"

SmallChange="1" TickPlacement="Both"/>

<TextBlock x:Name="textBlock"

HorizontalAlignment="Left" Margin="26,86,0,0"

TextWrapping="Wrap" Text="Some Text"

VerticalAlignment="Top" Width="214«

FontSize="{Binding ElementName=fontResizer, Path=Value}"/>

</Grid>

</Window>

Page 15: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 15

Результат

Page 16: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 16

Стили

Стилем называется коллекция значений свойств, которые могутприменяться к элементу. Система стилей WPF играет ту же роль,которую играет стандарт каскадных таблиц стилей (Cascading StyleSheet — CSS) в HTML-разметке. Подобно CSS, стили WPF позволяютопределять общий набор характеристик форматирования и применятьего повсюду в приложении для обеспечения согласованного вида.

<Window.Resources>

<FontFamily х:Key="ButtonFontFamily">Times New Roman</FontFamily>

<sys:Double x:Key="ButtonFontSize">18</s:Double>

<FontWeight x:Key="ButtonFontWeight">Bold</FontWeight>

</Window.Resources>

В этом фрагменте кода разметки в окно добавляются три ресурса: объектFontFamily с именем шрифта, который должен использоваться, объектDouble с числом 18 и перечислимое значение FontWeight.Bold. Здесьпредполагается, что .NET-пространство имен System было отображенона префикс sys пространства имен XML.

Далее можно использовать эти ресурсы для установки внешнего видаэлементов.

Page 17: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 17

Пример определения стилей

Описание стиля:

<Window.Resources>

<Style x:Key="MyButtonStyle">

<Setter Property="Control.FontFamily" Value="Calibri"></Setter>

<Setter Property="Control.FontSize" Value="18"></Setter>

<Setter Property="Control.FontWeight" Value="Bold"></Setter>

<Setter Property="Control.Padding" Value="5"></Setter>

<Setter Property="Control.Margin" Value="5"></Setter>

</Style>

</Window.Resources>

Применение стиля

<Button Content="Button" Style="{StaticResource MyButtonStyle}" />

Page 18: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 18

Пример

Page 19: C# Desktop. Занятие 10

http://www.slideshare.net/IgorShkulipa 19

Лабораторная работа №10. WPF

Создать приложение для синхронизации файлов в разных директориях(например, директория на жестком диске и на флеш-накопителе).

Реализовать функции (с одной и другой стороны):• Файл изменен• Файл удален• Файл создан

Интерфейс приложения создать на основе WPF.

Реализовать ведение логов в виде XML. Проводить анализ необходимостисинхронизации, учитывая предыдущие изменения, записанные в XML-логе.