SlideShare a Scribd company logo
1 of 15
Download to read offline
Темы лекции: WPF.
Практическое задание: WPF.
Тренер: Игорь Шкулипа, к.т.н.
Платформа .Net и язык программирования C#.
Занятие 11
http://www.slideshare.net/IgorShkulipa 2
Связывание данных с внутренними объектами
<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="421.8" Width="278.003">
<Grid HorizontalAlignment="Left" Height="394" VerticalAlignment="Top" Width="268"
Margin="0,0,0,-2">
<TextBox x:Name="HeightBox" HorizontalAlignment="Left" Height="23"
Margin="10,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248"
Text="" TextChanged="HeightBox_TextChanged"/>
<Label x:Name="HeightLabel" Content="Высота" HorizontalAlignment="Left"
Margin="10,10,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="WidthBox" HorizontalAlignment="Left" Height="23"
Margin="10,115,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248"
Text="" TextChanged="WidthBox_TextChanged" />
<Label x:Name="WidthLabel" Content="Ширина" HorizontalAlignment="Left"
Margin="10,87,0,0" VerticalAlignment="Top"/>
<TextBox x:Name="AreaBox" HorizontalAlignment="Left" Height="23"
Margin="10,197,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248"
Text=""/>
<Label Content="Площадь" HorizontalAlignment="Left" Margin="10,169,0,0"
VerticalAlignment="Top"/>
<Slider x:Name="FontSizeSlider" HorizontalAlignment="Left" Margin="10,242,0,0"
VerticalAlignment="Top" Width="248" Maximum="50" Minimum="5" SmallChange="1"
TickFrequency="2" TickPlacement="Both"/>
<TextBlock x:Name="TextToChangeSize" HorizontalAlignment="Left" Height="43"
Margin="10,294,0,-16" TextWrapping="Wrap" Text="Some Text" VerticalAlignment="Top"
Width="248"/>
</Grid>
</Window>
http://www.slideshare.net/IgorShkulipa 3
Класс «Четырехугольник»
public class Rectangle
{
public Rectangle()
{}
private double width;
private double height;
private double area;
public string Width {
get { return Convert.ToString(width); }
set { width = Convert.ToDouble(value); }
}
public string Height {
get { return Convert.ToString(height); }
set { height = Convert.ToDouble(value); }
}
public string Area {
get {
area = width * height;
return Convert.ToString(area);
}
set {
area = width*height;
}
}
}
http://www.slideshare.net/IgorShkulipa 4
Класс «Размер шрифта»
class FontSizeValue
{
private int svalue;
public int Value
{
get
{
return Convert.ToInt32(50 * Math.Sin(svalue));
}
set
{
svalue = value;
}
}
}
http://www.slideshare.net/IgorShkulipa 5
Класс «Основное окно»
public partial class MainWindow : Window
{
Rectangle rect;
FontSizeValue fsv;
public MainWindow()
{
rect = new Rectangle();
fsv = new FontSizeValue();
Binding HeightBinding = new Binding();
HeightBinding.Path = new PropertyPath("Height");
HeightBinding.Mode = BindingMode.TwoWay;
HeightBinding.Source = rect;
HeightBinding.UpdateSourceTrigger =
UpdateSourceTrigger.PropertyChanged;
Binding WidthBinding = new Binding();
WidthBinding.Path = new PropertyPath("Width");
WidthBinding.Mode = BindingMode.TwoWay;
WidthBinding.Source = rect;
WidthBinding.UpdateSourceTrigger =
UpdateSourceTrigger.PropertyChanged;
http://www.slideshare.net/IgorShkulipa 6
Класс «Основное окно»
Binding AreaBinding = new Binding();
AreaBinding.Path = new PropertyPath("Area");
AreaBinding.Mode = BindingMode.TwoWay;
AreaBinding.Source = rect;
AreaBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
Binding SliderBinding = new Binding();
SliderBinding.Path = new PropertyPath("Value");
SliderBinding.Mode = BindingMode.OneWayToSource;
SliderBinding.Source = fsv;
SliderBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
Binding FontSizeBinding = new Binding();
FontSizeBinding.Path = new PropertyPath("Value");
FontSizeBinding.Mode = BindingMode.OneWay;
FontSizeBinding.Source = fsv;
FontSizeBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
InitializeComponent();
HeightBox.SetBinding(TextBox.TextProperty, HeightBinding);
WidthBox.SetBinding(TextBox.TextProperty, WidthBinding);
AreaBox.SetBinding(TextBox.TextProperty,AreaBinding);
FontSizeSlider.SetBinding(Slider.ValueProperty, SliderBinding);
TextToChangeSize.SetBinding(TextBlock.FontSizeProperty, FontSizeBinding);
}
http://www.slideshare.net/IgorShkulipa 7
Обработчики событий изменения текста
private void HeightBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (AreaBox != null) AreaBox.Text = "";
}
private void WidthBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (AreaBox != null) AreaBox.Text = "";
}
http://www.slideshare.net/IgorShkulipa 8
Результат
http://www.slideshare.net/IgorShkulipa 9
Анимации
В настоящее время в WPF используются три подхода к анимации (линейная
интерполяция, ключевые кадры и пути), ничто не мешает создавать классы
анимации, которые модифицируют значения на основе совершенно другого
подхода. Единственное требование — класс анимации должен модифицировать
значения с течением времени. В пространстве имен
System.Windows.Media.Animation описаны несколько классов анимации:
• 17 классов использующих анимацию методом интерполяции;
• 22 класса использующих анимацию ключевого кадра;
• 3 класса использующих анимацию на основе пути.
Все эти классы анимации унаследованы от абстрактного класса
ИмяТипаAnimationBase, реализующего несколько основополагающих аспектов.
Он предоставляет основу для создания собственных классов анимации. Если тип
данных поддерживает более одного типа анимации, то все его классы анимации
наследуются от абстрактного базового класса. Например, DoubleAnimation и
DoubleAnimationUsingKeyFrames — оба являются наследниками
DoubleAnimationBase.
Этими 42 классами содержимое пространства имен System.Windows.Media.Animation
не исчерпывается. Каждая анимация ключевого кадра также работает с
собственным классом ключевого кадра и классом коллекции ключевых кадров.
Так что в сумме пространство имен System.Windows.Media.Animation содержит
более 100 классов.
http://www.slideshare.net/IgorShkulipa 10
Пример
<Button x:Name="AnimateButton" Content="Animate”
HorizontalAlignment="Left" Margin="10,337,0,0”
VerticalAlignment="Top" Width="248" Height="47"/>
http://www.slideshare.net/IgorShkulipa 11
Обработчик
private void AnimateButton_Click(object sender, RoutedEventArgs e)
{
//TextBoxes
ThicknessAnimation ta1 = new ThicknessAnimation();
ta1.From = new Thickness(HeightBox.Margin.Left, HeightBox.Margin.Top,
HeightBox.Margin.Right, HeightBox.Margin.Bottom);
ta1.To = new Thickness(HeightBox.Margin.Left, WidthBox.Margin.Top,
HeightBox.Margin.Right, HeightBox.Margin.Bottom);
ThicknessAnimation ta2 = new ThicknessAnimation();
ta2.From = new Thickness(WidthBox.Margin.Left, WidthBox.Margin.Top,
WidthBox.Margin.Right, WidthBox.Margin.Bottom);
ta2.To = new Thickness(WidthBox.Margin.Left, HeightBox.Margin.Top,
WidthBox.Margin.Right, WidthBox.Margin.Bottom);
//Labels
ThicknessAnimation ta3 = new ThicknessAnimation();
ta3.From = new Thickness(HeightLabel.Margin.Left, HeightLabel.Margin.Top,
HeightLabel.Margin.Right, HeightLabel.Margin.Bottom);
ta3.To = new Thickness(HeightLabel.Margin.Left, WidthLabel.Margin.Top,
HeightLabel.Margin.Right, HeightLabel.Margin.Bottom);
ThicknessAnimation ta4 = new ThicknessAnimation();
ta4.From = new Thickness(WidthLabel.Margin.Left, WidthLabel.Margin.Top,
WidthLabel.Margin.Right, WidthLabel.Margin.Bottom);
ta4.To = new Thickness(WidthLabel.Margin.Left, HeightLabel.Margin.Top,
WidthLabel.Margin.Right, WidthLabel.Margin.Bottom);
HeightBox.BeginAnimation(TextBox.MarginProperty, ta1);
HeightLabel.BeginAnimation(Label.MarginProperty, ta3);
WidthBox.BeginAnimation(TextBox.MarginProperty, ta2);
WidthLabel.BeginAnimation(Label.MarginProperty, ta4);
}
http://www.slideshare.net/IgorShkulipa 12
Результат
Статьи по анимации в WPF:
Ссылка 1 Ссылка 2 Ссылка 3
http://www.slideshare.net/IgorShkulipa 13
Архитектурный паттерн MVVM
• Модель (Model), так же, как в
классическом паттерне MVC, Модель
представляет собой фундаментальные
данные, необходимые для работы
приложения (классы, структуры).
• Вид/Представление (View) так
же, как в классическом паттерне MVC,
Вид — это графический интерфейс, то
есть окно, кнопки и.т.п.
• Модель вида (ViewModel, что
означает «Model of View») является с
одной стороны абстракцией Вида, а с
другой предоставляет обертку данных
из Модели, которые подлежат
связыванию. То есть она содержит
Модель, которая преобразована к
Виду, а так же содержит в себе
команды, которыми может
пользоваться Вид, чтобы влиять на
Модель.
http://www.slideshare.net/IgorShkulipa 14
MVVM
http://www.slideshare.net/IgorShkulipa 15
Лабораторная работа №11. WPF
Создать приложение “Сумасшедший калькулятор”, которое реализует все
функции калькулятора, но после каждого нажатия кнопки, кнопки
перемешиваются в случайном порядке.

More Related Content

What's hot

Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассовAndrey Zakharevich
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьYandex
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееdelimitry
 
Новые возможности и оптимизация запросов в Google BigQuery
Новые возможности и оптимизация запросов в Google BigQueryНовые возможности и оптимизация запросов в Google BigQuery
Новые возможности и оптимизация запросов в Google BigQueryМаркетинг-аналитика с OWOX BI
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьYandex
 
Подводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IПодводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IVladimir Kochetkov
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиГлеб Тарасов
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотекаVasya Petrov
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
2014 iForum - Grails in Startup
2014 iForum - Grails in Startup2014 iForum - Grails in Startup
2014 iForum - Grails in StartupBohdan Danyliuk
 

What's hot (12)

Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Магия метаклассов
Магия метаклассовМагия метаклассов
Магия метаклассов
 
Михаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. АсинхронностьМихаил Давыдов - JavaScript. Асинхронность
Михаил Давыдов - JavaScript. Асинхронность
 
Python dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущееPython dict: прошлое, настоящее, будущее
Python dict: прошлое, настоящее, будущее
 
Новые возможности и оптимизация запросов в Google BigQuery
Новые возможности и оптимизация запросов в Google BigQueryНовые возможности и оптимизация запросов в Google BigQuery
Новые возможности и оптимизация запросов в Google BigQuery
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Михаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: АсинхронностьМихаил Давыдов — JavaScript: Асинхронность
Михаил Давыдов — JavaScript: Асинхронность
 
Подводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, IПодводные камни прикладной криптографии, I
Подводные камни прикладной криптографии, I
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
JavaScript-библиотека
JavaScript-библиотекаJavaScript-библиотека
JavaScript-библиотека
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
2014 iForum - Grails in Startup
2014 iForum - Grails in Startup2014 iForum - Grails in Startup
2014 iForum - Grails in Startup
 

Viewers also liked

C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.Igor Shkulipa
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business SchoolRick Petford
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015Lech Wilczynski
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion Ida Morán
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.Igor Shkulipa
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcionIda Morán
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.Igor Shkulipa
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Janet de Acevedo Macdonald
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
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 9vijay bhosekar
 
Production diary 4
Production diary 4Production diary 4
Production diary 4Laila Jaleel
 

Viewers also liked (20)

C# Desktop. Занятие 06.
C# Desktop. Занятие 06.C# Desktop. Занятие 06.
C# Desktop. Занятие 06.
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Your Five Senses
Your Five SensesYour Five Senses
Your Five Senses
 
Brochure – Massey University Business School
Brochure – Massey University Business SchoolBrochure – Massey University Business School
Brochure – Massey University Business School
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015InPay SA Kongres Mobilny 2015
InPay SA Kongres Mobilny 2015
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Capítulo iii correcion
Capítulo iii correcion Capítulo iii correcion
Capítulo iii correcion
 
C# Web. Занятие 03.
C# Web. Занятие 03.C# Web. Занятие 03.
C# Web. Занятие 03.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Tarea6
Tarea6Tarea6
Tarea6
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"Modern Arabian Horse mag 2012 "Destination: Tulsa"
Modern Arabian Horse mag 2012 "Destination: Tulsa"
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
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
 
Apokries2015
Apokries2015Apokries2015
Apokries2015
 
Production diary 4
Production diary 4Production diary 4
Production diary 4
 

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

WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловGeeksLab Odessa
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_schoolITmozg
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 
создание HTML игр на элементе canvas
создание HTML игр на элементе canvasсоздание HTML игр на элементе canvas
создание HTML игр на элементе canvasAlexander Samantsov
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDKSergey Penkovsky
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьВадим Воробьев
 
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
 Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур  Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур it-people
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8Technopark
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptDenis Latushkin
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.Дмитрий Бумов
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 

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

WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
I tmozg js_school
I tmozg js_schoolI tmozg js_school
I tmozg js_school
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
создание HTML игр на элементе canvas
создание HTML игр на элементе canvasсоздание HTML игр на элементе canvas
создание HTML игр на элементе canvas
 
Jsfwdays 2013-2
Jsfwdays 2013-2Jsfwdays 2013-2
Jsfwdays 2013-2
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Экскурсия по Flutter SDK
Экскурсия по Flutter SDKЭкскурсия по Flutter SDK
Экскурсия по Flutter SDK
 
Authemployee
AuthemployeeAuthemployee
Authemployee
 
Avito / SPA Meetup 2
Avito / SPA Meetup 2Avito / SPA Meetup 2
Avito / SPA Meetup 2
 
Разработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительностьРазработка крупного Standalone проекта на юнити: улучшаем производительность
Разработка крупного Standalone проекта на юнити: улучшаем производительность
 
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
 Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур  Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
 
Java осень 2012 лекция 8
Java осень 2012 лекция 8Java осень 2012 лекция 8
Java осень 2012 лекция 8
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
PT MIFI Labxss
PT MIFI LabxssPT MIFI Labxss
PT MIFI Labxss
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.XSS. Обходы фильтров и защит.
XSS. Обходы фильтров и защит.
 
IOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 

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 Базовый. Занятие 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. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.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 Базовый. Занятие 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. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 

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

  • 1. Темы лекции: WPF. Практическое задание: WPF. Тренер: Игорь Шкулипа, к.т.н. Платформа .Net и язык программирования C#. Занятие 11
  • 2. http://www.slideshare.net/IgorShkulipa 2 Связывание данных с внутренними объектами <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="421.8" Width="278.003"> <Grid HorizontalAlignment="Left" Height="394" VerticalAlignment="Top" Width="268" Margin="0,0,0,-2"> <TextBox x:Name="HeightBox" HorizontalAlignment="Left" Height="23" Margin="10,38,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248" Text="" TextChanged="HeightBox_TextChanged"/> <Label x:Name="HeightLabel" Content="Высота" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/> <TextBox x:Name="WidthBox" HorizontalAlignment="Left" Height="23" Margin="10,115,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248" Text="" TextChanged="WidthBox_TextChanged" /> <Label x:Name="WidthLabel" Content="Ширина" HorizontalAlignment="Left" Margin="10,87,0,0" VerticalAlignment="Top"/> <TextBox x:Name="AreaBox" HorizontalAlignment="Left" Height="23" Margin="10,197,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="248" Text=""/> <Label Content="Площадь" HorizontalAlignment="Left" Margin="10,169,0,0" VerticalAlignment="Top"/> <Slider x:Name="FontSizeSlider" HorizontalAlignment="Left" Margin="10,242,0,0" VerticalAlignment="Top" Width="248" Maximum="50" Minimum="5" SmallChange="1" TickFrequency="2" TickPlacement="Both"/> <TextBlock x:Name="TextToChangeSize" HorizontalAlignment="Left" Height="43" Margin="10,294,0,-16" TextWrapping="Wrap" Text="Some Text" VerticalAlignment="Top" Width="248"/> </Grid> </Window>
  • 3. http://www.slideshare.net/IgorShkulipa 3 Класс «Четырехугольник» public class Rectangle { public Rectangle() {} private double width; private double height; private double area; public string Width { get { return Convert.ToString(width); } set { width = Convert.ToDouble(value); } } public string Height { get { return Convert.ToString(height); } set { height = Convert.ToDouble(value); } } public string Area { get { area = width * height; return Convert.ToString(area); } set { area = width*height; } } }
  • 4. http://www.slideshare.net/IgorShkulipa 4 Класс «Размер шрифта» class FontSizeValue { private int svalue; public int Value { get { return Convert.ToInt32(50 * Math.Sin(svalue)); } set { svalue = value; } } }
  • 5. http://www.slideshare.net/IgorShkulipa 5 Класс «Основное окно» public partial class MainWindow : Window { Rectangle rect; FontSizeValue fsv; public MainWindow() { rect = new Rectangle(); fsv = new FontSizeValue(); Binding HeightBinding = new Binding(); HeightBinding.Path = new PropertyPath("Height"); HeightBinding.Mode = BindingMode.TwoWay; HeightBinding.Source = rect; HeightBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; Binding WidthBinding = new Binding(); WidthBinding.Path = new PropertyPath("Width"); WidthBinding.Mode = BindingMode.TwoWay; WidthBinding.Source = rect; WidthBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
  • 6. http://www.slideshare.net/IgorShkulipa 6 Класс «Основное окно» Binding AreaBinding = new Binding(); AreaBinding.Path = new PropertyPath("Area"); AreaBinding.Mode = BindingMode.TwoWay; AreaBinding.Source = rect; AreaBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; Binding SliderBinding = new Binding(); SliderBinding.Path = new PropertyPath("Value"); SliderBinding.Mode = BindingMode.OneWayToSource; SliderBinding.Source = fsv; SliderBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; Binding FontSizeBinding = new Binding(); FontSizeBinding.Path = new PropertyPath("Value"); FontSizeBinding.Mode = BindingMode.OneWay; FontSizeBinding.Source = fsv; FontSizeBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; InitializeComponent(); HeightBox.SetBinding(TextBox.TextProperty, HeightBinding); WidthBox.SetBinding(TextBox.TextProperty, WidthBinding); AreaBox.SetBinding(TextBox.TextProperty,AreaBinding); FontSizeSlider.SetBinding(Slider.ValueProperty, SliderBinding); TextToChangeSize.SetBinding(TextBlock.FontSizeProperty, FontSizeBinding); }
  • 7. http://www.slideshare.net/IgorShkulipa 7 Обработчики событий изменения текста private void HeightBox_TextChanged(object sender, TextChangedEventArgs e) { if (AreaBox != null) AreaBox.Text = ""; } private void WidthBox_TextChanged(object sender, TextChangedEventArgs e) { if (AreaBox != null) AreaBox.Text = ""; }
  • 9. http://www.slideshare.net/IgorShkulipa 9 Анимации В настоящее время в WPF используются три подхода к анимации (линейная интерполяция, ключевые кадры и пути), ничто не мешает создавать классы анимации, которые модифицируют значения на основе совершенно другого подхода. Единственное требование — класс анимации должен модифицировать значения с течением времени. В пространстве имен System.Windows.Media.Animation описаны несколько классов анимации: • 17 классов использующих анимацию методом интерполяции; • 22 класса использующих анимацию ключевого кадра; • 3 класса использующих анимацию на основе пути. Все эти классы анимации унаследованы от абстрактного класса ИмяТипаAnimationBase, реализующего несколько основополагающих аспектов. Он предоставляет основу для создания собственных классов анимации. Если тип данных поддерживает более одного типа анимации, то все его классы анимации наследуются от абстрактного базового класса. Например, DoubleAnimation и DoubleAnimationUsingKeyFrames — оба являются наследниками DoubleAnimationBase. Этими 42 классами содержимое пространства имен System.Windows.Media.Animation не исчерпывается. Каждая анимация ключевого кадра также работает с собственным классом ключевого кадра и классом коллекции ключевых кадров. Так что в сумме пространство имен System.Windows.Media.Animation содержит более 100 классов.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пример <Button x:Name="AnimateButton" Content="Animate” HorizontalAlignment="Left" Margin="10,337,0,0” VerticalAlignment="Top" Width="248" Height="47"/>
  • 11. http://www.slideshare.net/IgorShkulipa 11 Обработчик private void AnimateButton_Click(object sender, RoutedEventArgs e) { //TextBoxes ThicknessAnimation ta1 = new ThicknessAnimation(); ta1.From = new Thickness(HeightBox.Margin.Left, HeightBox.Margin.Top, HeightBox.Margin.Right, HeightBox.Margin.Bottom); ta1.To = new Thickness(HeightBox.Margin.Left, WidthBox.Margin.Top, HeightBox.Margin.Right, HeightBox.Margin.Bottom); ThicknessAnimation ta2 = new ThicknessAnimation(); ta2.From = new Thickness(WidthBox.Margin.Left, WidthBox.Margin.Top, WidthBox.Margin.Right, WidthBox.Margin.Bottom); ta2.To = new Thickness(WidthBox.Margin.Left, HeightBox.Margin.Top, WidthBox.Margin.Right, WidthBox.Margin.Bottom); //Labels ThicknessAnimation ta3 = new ThicknessAnimation(); ta3.From = new Thickness(HeightLabel.Margin.Left, HeightLabel.Margin.Top, HeightLabel.Margin.Right, HeightLabel.Margin.Bottom); ta3.To = new Thickness(HeightLabel.Margin.Left, WidthLabel.Margin.Top, HeightLabel.Margin.Right, HeightLabel.Margin.Bottom); ThicknessAnimation ta4 = new ThicknessAnimation(); ta4.From = new Thickness(WidthLabel.Margin.Left, WidthLabel.Margin.Top, WidthLabel.Margin.Right, WidthLabel.Margin.Bottom); ta4.To = new Thickness(WidthLabel.Margin.Left, HeightLabel.Margin.Top, WidthLabel.Margin.Right, WidthLabel.Margin.Bottom); HeightBox.BeginAnimation(TextBox.MarginProperty, ta1); HeightLabel.BeginAnimation(Label.MarginProperty, ta3); WidthBox.BeginAnimation(TextBox.MarginProperty, ta2); WidthLabel.BeginAnimation(Label.MarginProperty, ta4); }
  • 12. http://www.slideshare.net/IgorShkulipa 12 Результат Статьи по анимации в WPF: Ссылка 1 Ссылка 2 Ссылка 3
  • 13. http://www.slideshare.net/IgorShkulipa 13 Архитектурный паттерн MVVM • Модель (Model), так же, как в классическом паттерне MVC, Модель представляет собой фундаментальные данные, необходимые для работы приложения (классы, структуры). • Вид/Представление (View) так же, как в классическом паттерне MVC, Вид — это графический интерфейс, то есть окно, кнопки и.т.п. • Модель вида (ViewModel, что означает «Model of View») является с одной стороны абстракцией Вида, а с другой предоставляет обертку данных из Модели, которые подлежат связыванию. То есть она содержит Модель, которая преобразована к Виду, а так же содержит в себе команды, которыми может пользоваться Вид, чтобы влиять на Модель.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Лабораторная работа №11. WPF Создать приложение “Сумасшедший калькулятор”, которое реализует все функции калькулятора, но после каждого нажатия кнопки, кнопки перемешиваются в случайном порядке.