Дополнительные материалы к занятию можно скачать здесь.
Вложенные файлы: Presentation_7.pptx
Вложенные папки: Lecture_7_1, Lecture_7_2, Lecture_7_3
На смену традиционным Windows Forms постепенно приходит технология Windows Presentation Foundation. У Windows Forms за плечами славная история, накоплен огромный объем программного обеспечения. Однако постепенно стали выявляться определенные проблемы.
В настоящее время под Windows 7 работают самые разнообразные устройства - от персональных компьютеров до нетбуков, существует мобильная версия Windows 7 - Windows Phone 7. Персоналки обычно комплектуются большими мониторами с высоким разрешением, например, 1920 1080, разрешение ноутбуков поменьше, например, 1440 900, разрешение нетбуков и планшетных компьютеров и того меньше. Если оптимизировать традиционный двухмерный интерфейс под одно из этих устройств, то на других устройствах будут видны искажения.
Даже самая дешевая видеоплата в настоящее время имеет аппаратный ускоритель трехмерной графики. Жизнь не стоит на месте, и то что впечатляло 7-8 лет назад выглядит уже скучно. Пользователям гораздо удобнее пользоваться трехмерными возможностями интерфейса, чего не может дать традиционная технология GDI+.
Программистам и пользователям хотелось бы иметь такие же возможности веб-приложений, что и у программного обеспечения, написанного для настольных компьютеров. Новая технология WPF позволяет охватить все сегменты рынка - на настольных компьютерах запускаются собственно WPF-приложения, в Интернете - используется адаптированная версия WPF - Silverlight, на мобильных устройствах - также Silverlight и XNA.
Технология WPF дает целый ряд преимуществ.
В основе WPF лежит векторная система визуализации, не зависящая от разрешения и созданная с расчетом на возможности современного графического оборудования. WPF предоставляет средства для создания визуального интерфейса, включая Язык XAML (Extensible Application Markup Language), элементы управления, привязку данных, макеты, двухмерную и трехмерную графику, анимацию, стили, шаблоны, документы, текст, мультимедиа и оформление [21]. Графической технологией, лежащей в основе WPF является DirectX, в отличие от Windows Forms, где используется GDI/GDI+[2]. Производительность WPF выше, чем у GDI+ за счёт использования аппаратного ускорения графики через DirectX.
При разработке WPF-приложений широко применяется язык расширенной разметки для приложений (XAML). XAML представляет собой XML, в котором фактически реализованы классы .NET Framework. Так же реализована модель разделения кода и дизайна, позволяющая кооперироваться программисту и дизайнеру. Кроме того, есть встроенная поддержка стилей элементов, а сами элементы легко разделить на элементы управления второго уровня, которые в свою очередь разлагаются до уровня векторных фигур и свойств/действий [21].
Для работы с WPF требуется любой .NET-совместимый язык. В этот список входит множество языков: C#, VB, C++, Ruby, Python, Delphi (Prism), Lua и многие другие. Для полноценной работы может быть использована как Visual Studio, так и Expression Blend. Впрочем, первая ориентирована на программирование, а вторая - на дизайн и позволяет делать многие вещи, не прибегая к ручному редактированию XAML. Примеры этому - анимация, стилизация, состояния, создание элементов управления и так далее [21].
Рассмотрим несколько примеров создания WPF-приложений.
Создадим приложение Windows Presentation Foundation.
Создаем проект Lecture_7_1.
Приложения wpf содержат два основных файла: MainWindow.xaml и MainWindow.xaml.cs
В окне MainWindow.xaml наберите следующий код:
<Window x:Class="Lecture_7_1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox Height="23" HorizontalAlignment="Left" Margin="19,20,0,0"
VerticalAlignment="Top" Width="120" Name="txtA" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="19,49,0,0"
VerticalAlignment="Top" Width="120" Name="txtB" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="19,78,0,0"
VerticalAlignment="Top" Width="120" Name="txtC" />
<Label Height="79" HorizontalAlignment="Left" Margin="152,22,0,0"
Name="lblResult" VerticalAlignment="Top" Width="304" />
<Button Content="Нажми меня!" Height="23" HorizontalAlignment="Left"
Margin="21,117,0,0" Name="myButton" VerticalAlignment="Top"
Width="120" Click="myButton_Click" />
</Grid>
</Window>
Перейдите в окно MainWindow.xaml.cs и введите следующий код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lecture_7_1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void myButton_Click(object sender, RoutedEventArgs e)
{
double a, b, c, d, x1, x2;
string str;
a = System.Convert.ToDouble(txtA.Text);
b = System.Convert.ToDouble(txtB.Text);
c = System.Convert.ToDouble(txtC.Text);
d = System.Math.Pow(b, 2) - 4 * a * c;
if (d < 0) { str = "Действительных корней нет!"; }
else { x1 = (-b - System.Math.Sqrt(d)) / (2 * a); x2 =
=(-b + System.Math.Sqrt(d)) / (2 * a); str = "x1 = " + x1 + "\nx2
= " + x2; }
lblResult.Content = str;
}
}
}
Получаем следующий результат:
ГЛОНАСС- и GPS-навигаторы могут уверенно принимать сигналы только со спутников, расположенных выше определенного угла к горизонту - $$\alpha$$. Попытаемся определить критерий видимости спутников от наблюдателя, расположенного на поверхности Земли на основании радиуса Земли, высоты орбиты спутников ГЛОНАСС и угла к горизонту $$\alpha$$. Ситуацию можно описать графически:
Требуется определить расстояние от наблюдателя до точки пересечения прямой с углом $$\alpha$$ к линии горизонта и орбитой спутника.
Уравнение прямой: $$y=R+x\times\tg$$
Уравнение окружности: $$(R+H)^2=x^2+y^2$$
Найдем точку пересечения прямой и окружности:
$$y^2=(R+H)^2-x^2=R^2+2R\tg\alpha x+x^2(tg\alpha)^2\\ x^2(1+(\tg\alpha)^2)+ 2R\tg\alpha x-2RH-H^2=0\\ a=1+(\tg\alpha)^2\\ b=2R\tg\alpha\\ c=-H(2R+H)$$При маске горизонта $$\alpha =10^0$$, радиусе Земли $$R=6378136\text{ м}$$ и высоте орбиты спутников ГЛОНАСС 19100000 м находим корни квадратного уравнения:
$$x_1= -25407331,34\\ x_2=23225880,35$$Отрицательный корень отбрасываем, принимаем катет треугольник $$m=x_2$$. Находим гипотенузу $$n=\frac m{\cos(\alpha)} =23584177\text{ м}$$.
Иными словами, при круговой орбите спутников и маске горизонта $$10^0$$ от наблюдателя будут видны спутники, расположенные не далее 23584177 м.
Для решения задачи создадим проект wpf Lecture_7_2.
Код MainWindow.xaml:
<Window x:Class="Lecture_7_2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Name="bttn" Click="bttn_Click" Margin="0,0,400,280" Content="Нажми меня!"/>
</Grid>
</Window>
Код MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lecture_7_2
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void bttn_Click(object sender, RoutedEventArgs e)
{
double R, H, alpha;
string str;
R = 6378136;
H = 19100000;
alpha = 10 * System.Math.PI / 180;
double a, b, c, d, x1, x2;
a = 1 + System.Math.Pow((System.Math.Tan(alpha)), 2);
b = 2 * R * Math.Tan(alpha);
c = -H * (2 * R + H);
d = System.Math.Pow(b, 2) - 4 * a * c;
double distance;
if (d < 0) { str = "Действительных корней нет!"; }
else
{
x1 = (-b - System.Math.Sqrt(d)) / (2 * a);
x2 = (-b + System.Math.Sqrt(d)) / (2 * a);
if (x1 < 0) { distance = x2 / System.Math.Cos(alpha); }
else { distance = x1 / System.Math.Cos(alpha); }
str = "x1 = " + x1 + "\nx2 = " + x2 + "\nРасстояние = " + distance + " м";
}
MessageBox.Show(str);
}
}
}
Получаем следующий результат:
В следующем примере мы разработаем программу-переводчик. Создаем новый проект Lecture_7_3.
MainWindow.xaml:
<Window x:Class="Lecture_7_3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Name="grid1">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBox Name="txtQuestion" VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" Margin="10,10,13,10" TextWrapping="Wrap"
Grid.Row="0" FontFamily="Verdana"
FontSize="24" Foreground="Green">
Введите слово по-английски
</TextBox>
<Button VerticalAlignment="Top" HorizontalAlignment="Left"
Margin="10,0,0,20" Width="127" Height="23"
Name="cmdAnswer" Click="cmdTranslate_Click" Grid.Row="1">
Перевести
</Button>
<TextBox VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
Margin="10,10,13,10" Name="txtAnswer" TextWrapping="Wrap"
IsReadOnly="True" FontFamily="Verdana" FontSize="24"
Foreground="Green" Grid.Row="2">
Здесь будет перевод
</TextBox>
</Grid>
</Window>
MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Lecture_7_3
{
class AnswerGenerator
{
string str;
public string getTranslate(string Question)
{
switch (Question)
{
case "Apple": str = "Яблоко"; break;
case "Lemon": str = "Лимон"; break;
case "Orange": str = "Апельсин"; break;
case "Mellon": str = "Дыня"; break;
case "Water": str = "Вода"; break;
case "Bred": str = "Хлеб"; break;
case "Butter": str = "Масло"; break;
}
return str;
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void cmdTranslate_Click(object sender, RoutedEventArgs e)
{
AnswerGenerator generator = new AnswerGenerator();
txtAnswer.Text = generator.getTranslate(txtQuestion.Text);
}
}
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.