SlideShare a Scribd company logo
Темы лекции: WPF.
Практическое задание: WPF.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 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 и позволяет создавать
приложения, включающие другие элементы библиотеки классов .NET
Framework.
http://www.slideshare.net/IgorShkulipa 3
Общие сведения о WPF
WPF существует в качестве подмножества типов .NET Framework, которые
занимают большую часть в пространстве имен System.Windows.
Для поддержки некоторых более мощных возможностей WPF и для
упрощения процесса программирования WPF включает
дополнительные программные конструкции, которые расширяют
свойства и события: свойства зависимостей и перенаправленные
события.
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>
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>
http://www.slideshare.net/IgorShkulipa 6
XAML
Синтаксис языка XAML основан преимущественно на XML. Согласно
определению, допустимый код XAML должен быть допустимым кодом
XML. Однако некоторые синтаксические принципы XAML имеют другое,
более сложное значение, будучи допустимыми в XML через
спецификацию XML 1.0. Например, XAML поддерживает синтаксис
свойства элемента, при котором значения свойства могут быть
установлены через элементы, а не через строковые значения
атрибутов или содержимого. Для XML этот синтаксис свойства
элемента просто был бы сочтен элементом, в имени которого есть
точка.
Visual Studio помогает соблюдать правила синтаксиса XAML как в
текстовом редакторе языка XAML, так и в рабочей области
конструирования XAML.
http://www.slideshare.net/IgorShkulipa 7
Пространства имен XAML
С помощью пространств имен в программной инфраструктуре можно отделить
идентификаторы, объявленные пользователем, от идентификаторов, объявленных
самой инфраструктурой, устранить неоднозначность идентификаторов, используя
префиксы пространства имен, и т. д. В языке XAML эту функцию выполняет
собственная концепция пространства имен XAML. Вот как в языке XAML применяется и
развивается концепция пространств имен XML.
• Для объявления пространств имен используется зарезервированный атрибут
пространства имен по умолчанию xmlns, и значением этого атрибута является
универсальный код ресурса (URI).
• Пространства имен не по умолчанию объявляются в XAML с назначением им
префиксов; использование префиксов в элементах и атрибутах рассматривается
как техника ссылки на соответствующее пространство имен.
• Если атрибут "xmlns" не указан, в языке XAML применяется концепция
пространства имен по умолчанию. Пространство имен по умолчанию может не
являться пространством имен по умолчанию на языке XML и может быть
определено различными способами для каждой программной архитектуры XAML.
• Определения пространств имен в XML-документе наследуются от родительского
элемента к дочернему.
• Атрибуты элемента наследуют пространства имен элемента, поэтому префиксы в
атрибутах обычно не используются.
В корневом элементе XAML-файла всегда объявляется пространство имен XAML по
умолчанию. Пространство имен XAML по умолчанию определяет, какие элементы могут
быть объявлены без указания уточняющего префикса.
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
Определяет элементы, которые должны использовать локализованные ресурсы
для некоторых значений их свойств.
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: делает возможной определенную форму привязки шаблонов.
http://www.slideshare.net/IgorShkulipa 10
События
XAML — декларативный язык для объявления объектов и их свойств, но
он также содержит синтаксические средства для назначения
обработчиков событий объектам в разметке.
Синтаксис событий XAML позволяет затем интегрировать объявленные в
XAML-коде события через модель программирования приложений
среды выполнения Windows. Имя события задается как имя атрибута
объекта, в котором обрабатывается событие.
В качестве значения атрибута указывается имя функции обработчика
событий, которая определяется в коде.
Обработчик XAML использует это имя для создания представления
делегирования в загруженном дереве объектов и добавляет указанный
обработчик во внутренний список обработчиков.
http://www.slideshare.net/IgorShkulipa 11
Перенаправленные события
Перенаправленное событие — это тип события, который может вызывать
обработчики для нескольких прослушивателей в элементе дерева, а не
только для объекта, вызвавшего событие.
Перенаправленное событие — это событие CLR, которое резервируется
экземпляром класса RoutedEvent и обрабатывается в системе событий
Windows Presentation Foundation (WPF).
Обычно в приложении WPF содержится много элементов. В зависимости
от того, созданы элементы в коде или объявлены в XAML, они связаны
в дереве элементов друг с другом. Маршрут события может проходить
в одном из двух направлений в зависимости от определения события,
но обычно маршрут проходит от исходного элемента и затем
"всплывает" вверх по дереву элементов до тех пор, пока не достигнет
корневого элемента дерева (как правило, страница или окно).
http://www.slideshare.net/IgorShkulipa 12
Пример разметки
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!";
}
}
}
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>
http://www.slideshare.net/IgorShkulipa 15
Результат
http://www.slideshare.net/IgorShkulipa 16
Стили
Стилем называется коллекция значений свойств, которые могут
применяться к элементу. Система стилей WPF играет ту же роль,
которую играет стандарт каскадных таблиц стилей (Cascading Style
Sheet — 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.
Далее можно использовать эти ресурсы для установки внешнего вида
элементов.
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}" />
http://www.slideshare.net/IgorShkulipa 18
Пример
http://www.slideshare.net/IgorShkulipa 19
Лабораторная работа №10. WPF
Создать приложение для синхронизации файлов в разных директориях
(например, директория на жестком диске и на флеш-накопителе).
Реализовать функции (с одной и другой стороны):
• Файл изменен
• Файл удален
• Файл создан
Интерфейс приложения создать на основе WPF.
Реализовать ведение логов в виде XML. Проводить анализ необходимости
синхронизации, учитывая предыдущие изменения, записанные в XML-
логе.

More Related Content

Viewers also liked

Advanced LinkedIn Techniques
Advanced LinkedIn TechniquesAdvanced LinkedIn Techniques
Advanced LinkedIn Techniques
James Weber
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
Igor Shkulipa
 
AdminMgr&IntDesCV_3.30.15
AdminMgr&IntDesCV_3.30.15AdminMgr&IntDesCV_3.30.15
AdminMgr&IntDesCV_3.30.15
Melanie Oringer
 
Production diary 11
Production diary 11Production diary 11
Production diary 11
Laila Jaleel
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
Igor Shkulipa
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
Igor Shkulipa
 
Apokries2015
Apokries2015Apokries2015
Apokries2015
syllogos15sch
 
Emergency Assistance
Emergency AssistanceEmergency Assistance
Emergency Assistance
Isaac Ashkenazi MD
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
Anwar Pérez
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
Steve Gillick
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
vijay bhosekar
 
Truly Verona
Truly VeronaTruly Verona
Truly Verona
trulyitaly
 
Production diary 10
Production diary 10Production diary 10
Production diary 10
Laila Jaleel
 
HG
HGHG
Production diary 4
Production diary 4Production diary 4
Production diary 4
Laila Jaleel
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
vijay bhosekar
 
10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business
The Trademark Helpline
 
Production diary 17
Production diary 17Production diary 17
Production diary 17
Laila Jaleel
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
Igor Shkulipa
 

Viewers also liked (20)

Advanced LinkedIn Techniques
Advanced LinkedIn TechniquesAdvanced LinkedIn Techniques
Advanced LinkedIn Techniques
 
C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.C++ Базовый. Занятие 13.
C++ Базовый. Занятие 13.
 
Print Brochure 3NM v6
Print Brochure 3NM v6Print Brochure 3NM v6
Print Brochure 3NM v6
 
AdminMgr&IntDesCV_3.30.15
AdminMgr&IntDesCV_3.30.15AdminMgr&IntDesCV_3.30.15
AdminMgr&IntDesCV_3.30.15
 
Production diary 11
Production diary 11Production diary 11
Production diary 11
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 01.
C# Web. Занятие 01.C# Web. Занятие 01.
C# Web. Занятие 01.
 
Apokries2015
Apokries2015Apokries2015
Apokries2015
 
Emergency Assistance
Emergency AssistanceEmergency Assistance
Emergency Assistance
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Nowhere But Niigata
Nowhere But NiigataNowhere But Niigata
Nowhere But Niigata
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
 
Truly Verona
Truly VeronaTruly Verona
Truly Verona
 
Production diary 10
Production diary 10Production diary 10
Production diary 10
 
HG
HGHG
HG
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
 
10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business10 Reasons to Trademark Your Business
10 Reasons to Trademark Your Business
 
Production diary 17
Production diary 17Production diary 17
Production diary 17
 
C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.C++ Базовый. Занятие 05.
C++ Базовый. Занятие 05.
 

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

XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
GetDev.NET
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
Igor Shkulipa
 
JavaScript
JavaScriptJavaScript
JavaScript
Vasya Petrov
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
Vladimir Burdaev
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Fedor Malyshkin
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
Dmitriy Krukov
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
JSC “Arcadia Inc”
 
Flex 4 gumbo framework
Flex 4 gumbo frameworkFlex 4 gumbo framework
Flex 4 gumbo frameworkValery
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование SymfonyMedia Gorod
 
массивы Php
массивы Phpмассивы Php
массивы Php
Vasya Petrov
 
HTML
HTMLHTML
HTML
L1nk1502
 
XSLT -5
XSLT -5 XSLT -5
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
KewpaN
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
DEVTYPE
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEA
Alexander Zastashkov
 
Less
LessLess
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
Основы HTML
Основы HTMLОсновы HTML
Основы HTML
Ирина Табанец
 
TypeScript
TypeScriptTypeScript
TypeScript
GetDev.NET
 

Similar to C# Desktop. Занятие 10. (20)

XAML - язык разметки приложений
XAML - язык разметки приложенийXAML - язык разметки приложений
XAML - язык разметки приложений
 
C# Desktop. Занятие 09.
C# Desktop. Занятие 09.C# Desktop. Занятие 09.
C# Desktop. Занятие 09.
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXBТехнология создания веб-сервисов на базе стандарта JAX-WS & JAXB
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
 
Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5Мировые информационные ресурсы. Лекция 5
Мировые информационные ресурсы. Лекция 5
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
Flex 4 gumbo framework
Flex 4 gumbo frameworkFlex 4 gumbo framework
Flex 4 gumbo framework
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
 
массивы Php
массивы Phpмассивы Php
массивы Php
 
HTML
HTMLHTML
HTML
 
XSLT -5
XSLT -5 XSLT -5
XSLT -5
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
 
Архитектура ROS
Архитектура ROSАрхитектура ROS
Архитектура ROS
 
Custom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEACustom Language Plugin for JetBrains IDEA
Custom Language Plugin for JetBrains IDEA
 
Less
LessLess
Less
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
Основы HTML
Основы HTMLОсновы HTML
Основы HTML
 
TypeScript
TypeScriptTypeScript
TypeScript
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
Igor Shkulipa
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
Igor Shkulipa
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
Igor Shkulipa
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 07.
C# Web. Занятие 07.C# Web. Занятие 07.
C# Web. Занятие 07.
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 

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

  • 1. Темы лекции: WPF. Практическое задание: WPF. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 10
  • 2. http://www.slideshare.net/IgorShkulipa 2 WPF Windows Presentation Foundation (WPF) ― это система следующего поколения для построения клиентских приложений Windows с визуально привлекательными возможностями взаимодействия с пользователем. С помощью WPF можно создавать широкий спектр как автономных, так и размещенных в браузере приложений. В основе WPF лежит векторная система рисовки, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF расширяет базовую систему полным набором функций разработки приложений. Язык XAML (Extensible Application Markup Language) создан для управления элементами управления, привязкой данных, макетом, двухмерной и трехмерной графикой, анимацией, стилями, шаблонами, документами, мультимедиа, текстом и оформлением. WPF входит в состав Microsoft .NET Framework и позволяет создавать приложения, включающие другие элементы библиотеки классов .NET Framework.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Общие сведения о WPF WPF существует в качестве подмножества типов .NET Framework, которые занимают большую часть в пространстве имен System.Windows. Для поддержки некоторых более мощных возможностей WPF и для упрощения процесса программирования WPF включает дополнительные программные конструкции, которые расширяют свойства и события: свойства зависимостей и перенаправленные события.
  • 4. 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>
  • 5. 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>
  • 6. http://www.slideshare.net/IgorShkulipa 6 XAML Синтаксис языка XAML основан преимущественно на XML. Согласно определению, допустимый код XAML должен быть допустимым кодом XML. Однако некоторые синтаксические принципы XAML имеют другое, более сложное значение, будучи допустимыми в XML через спецификацию XML 1.0. Например, XAML поддерживает синтаксис свойства элемента, при котором значения свойства могут быть установлены через элементы, а не через строковые значения атрибутов или содержимого. Для XML этот синтаксис свойства элемента просто был бы сочтен элементом, в имени которого есть точка. Visual Studio помогает соблюдать правила синтаксиса XAML как в текстовом редакторе языка XAML, так и в рабочей области конструирования XAML.
  • 7. http://www.slideshare.net/IgorShkulipa 7 Пространства имен XAML С помощью пространств имен в программной инфраструктуре можно отделить идентификаторы, объявленные пользователем, от идентификаторов, объявленных самой инфраструктурой, устранить неоднозначность идентификаторов, используя префиксы пространства имен, и т. д. В языке XAML эту функцию выполняет собственная концепция пространства имен XAML. Вот как в языке XAML применяется и развивается концепция пространств имен XML. • Для объявления пространств имен используется зарезервированный атрибут пространства имен по умолчанию xmlns, и значением этого атрибута является универсальный код ресурса (URI). • Пространства имен не по умолчанию объявляются в XAML с назначением им префиксов; использование префиксов в элементах и атрибутах рассматривается как техника ссылки на соответствующее пространство имен. • Если атрибут "xmlns" не указан, в языке XAML применяется концепция пространства имен по умолчанию. Пространство имен по умолчанию может не являться пространством имен по умолчанию на языке XML и может быть определено различными способами для каждой программной архитектуры XAML. • Определения пространств имен в XML-документе наследуются от родительского элемента к дочернему. • Атрибуты элемента наследуют пространства имен элемента, поэтому префиксы в атрибутах обычно не используются. В корневом элементе XAML-файла всегда объявляется пространство имен XAML по умолчанию. Пространство имен XAML по умолчанию определяет, какие элементы могут быть объявлены без указания уточняющего префикса.
  • 8. 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 Определяет элементы, которые должны использовать локализованные ресурсы для некоторых значений их свойств.
  • 9. 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: делает возможной определенную форму привязки шаблонов.
  • 10. http://www.slideshare.net/IgorShkulipa 10 События XAML — декларативный язык для объявления объектов и их свойств, но он также содержит синтаксические средства для назначения обработчиков событий объектам в разметке. Синтаксис событий XAML позволяет затем интегрировать объявленные в XAML-коде события через модель программирования приложений среды выполнения Windows. Имя события задается как имя атрибута объекта, в котором обрабатывается событие. В качестве значения атрибута указывается имя функции обработчика событий, которая определяется в коде. Обработчик XAML использует это имя для создания представления делегирования в загруженном дереве объектов и добавляет указанный обработчик во внутренний список обработчиков.
  • 11. http://www.slideshare.net/IgorShkulipa 11 Перенаправленные события Перенаправленное событие — это тип события, который может вызывать обработчики для нескольких прослушивателей в элементе дерева, а не только для объекта, вызвавшего событие. Перенаправленное событие — это событие CLR, которое резервируется экземпляром класса RoutedEvent и обрабатывается в системе событий Windows Presentation Foundation (WPF). Обычно в приложении WPF содержится много элементов. В зависимости от того, созданы элементы в коде или объявлены в XAML, они связаны в дереве элементов друг с другом. Маршрут события может проходить в одном из двух направлений в зависимости от определения события, но обычно маршрут проходит от исходного элемента и затем "всплывает" вверх по дереву элементов до тех пор, пока не достигнет корневого элемента дерева (как правило, страница или окно).
  • 13. 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!"; } } }
  • 14. 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>
  • 16. http://www.slideshare.net/IgorShkulipa 16 Стили Стилем называется коллекция значений свойств, которые могут применяться к элементу. Система стилей WPF играет ту же роль, которую играет стандарт каскадных таблиц стилей (Cascading Style Sheet — 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. Далее можно использовать эти ресурсы для установки внешнего вида элементов.
  • 17. 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}" />
  • 19. http://www.slideshare.net/IgorShkulipa 19 Лабораторная работа №10. WPF Создать приложение для синхронизации файлов в разных директориях (например, директория на жестком диске и на флеш-накопителе). Реализовать функции (с одной и другой стороны): • Файл изменен • Файл удален • Файл создан Интерфейс приложения создать на основе WPF. Реализовать ведение логов в виде XML. Проводить анализ необходимости синхронизации, учитывая предыдущие изменения, записанные в XML- логе.