Темы лекции: 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

PPTX
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
PPTX
Приложения для Windows Phone: как мы это делаем #codefest
PPT
Javascript
PPTX
константин лебедев
PPT
Подробная презентация JavaScript 6 в 1
PDF
MongoDB@addconf
PPT
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
PDF
FrontTalks: Константин Лебедев (Mail.ru), File API: обработка файлов на клиен...
MongoDB - About Performance Optimization, Ivan Griga - Smart Gamma
Приложения для Windows Phone: как мы это делаем #codefest
Javascript
константин лебедев
Подробная презентация JavaScript 6 в 1
MongoDB@addconf
CodeFest 2013. Никонов Г. — Как мы разрабатываем приложения для Windows Phone...
FrontTalks: Константин Лебедев (Mail.ru), File API: обработка файлов на клиен...

What's hot (12)

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

Viewers also liked (20)

PDF
C# Desktop. Занятие 06.
PDF
C# Desktop. Занятие 02.
PDF
Your Five Senses
PDF
Brochure – Massey University Business School
PDF
C# Web. Занятие 02.
PDF
JavaScript Базовый. Занятие 11.
PDF
InPay SA Kongres Mobilny 2015
PDF
C++ STL & Qt. Занятие 08.
DOCX
Capítulo iii correcion
PDF
C# Web. Занятие 03.
PDF
C# Web. Занятие 12.
DOCX
Trabajo completo correcion
PDF
C++ STL & Qt. Занятие 10.
PPTX
Tarea6
PDF
C# Web. Занятие 15.
PDF
Modern Arabian Horse mag 2012 "Destination: Tulsa"
PDF
JavaScript Базовый. Занятие 09.
PPTX
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
PPTX
Apokries2015
PPTX
Production diary 4
C# Desktop. Занятие 06.
C# Desktop. Занятие 02.
Your Five Senses
Brochure – Massey University Business School
C# Web. Занятие 02.
JavaScript Базовый. Занятие 11.
InPay SA Kongres Mobilny 2015
C++ STL & Qt. Занятие 08.
Capítulo iii correcion
C# Web. Занятие 03.
C# Web. Занятие 12.
Trabajo completo correcion
C++ STL & Qt. Занятие 10.
Tarea6
C# Web. Занятие 15.
Modern Arabian Horse mag 2012 "Destination: Tulsa"
JavaScript Базовый. Занятие 09.
Vijay Bhosekar_ PP_Rodale Institute_Feb 9
Apokries2015
Production diary 4
Ad

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

PDF
Разработка пользовательских элементов управления в WPF
PDF
C# Desktop. Занятие 10.
RTF
внедрении Wpf в сложных системах
PPTX
внедрении Wpf в сложных системах (слайды)
PPTX
Разработка приложений работы с данными при помощи WPF
PDF
MVVM в WinForms – DevExpress Way (теория и практика)
PPTX
XAML - язык разметки приложений
Разработка пользовательских элементов управления в WPF
C# Desktop. Занятие 10.
внедрении Wpf в сложных системах
внедрении Wpf в сложных системах (слайды)
Разработка приложений работы с данными при помощи WPF
MVVM в WinForms – DevExpress Way (теория и практика)
XAML - язык разметки приложений

More from Igor Shkulipa (20)

PDF
Общие темы. Тема 03.
PDF
Общие темы. Тема 02.
PDF
Общие темы. Тема 01.
PDF
JavaScript Базовый. Занятие 06.
PDF
JavaScript Базовый. Занятие 10.
PDF
JavaScript Базовый. Занятие 05.
PDF
JavaScript Базовый. Занятие 08.
PDF
JavaScript Базовый. Занятие 07.
PDF
JavaScript Базовый. Занятие 01.
PDF
JavaScript Базовый. Занятие 04.
PDF
JavaScript Базовый. Занятие 03.
PDF
JavaScript Базовый. Занятие 02.
PDF
C# Web. Занятие 09.
PDF
C# Web. Занятие 08.
PDF
C# Web. Занятие 07.
PDF
C# Web. Занятие 04.
PDF
C# Web. Занятие 16.
PDF
C# Web. Занятие 14.
PDF
C# Web. Занятие 13.
PDF
C# Web. Занятие 11.
Общие темы. Тема 03.
Общие темы. Тема 02.
Общие темы. Тема 01.
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 02.
C# Web. Занятие 09.
C# Web. Занятие 08.
C# Web. Занятие 07.
C# Web. Занятие 04.
C# Web. Занятие 16.
C# Web. Занятие 14.
C# Web. Занятие 13.
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 Создать приложение “Сумасшедший калькулятор”, которое реализует все функции калькулятора, но после каждого нажатия кнопки, кнопки перемешиваются в случайном порядке.