Опубликован: 01.11.2011 | Доступ: свободный | Студентов: 1425 / 63 | Оценка: 3.84 / 3.44 | Длительность: 15:38:00
Специальности: Программист
Лекция 7:

Знакомство с Silverlight

Аннотация: В ходе выполнения данной работы учащиеся познакомятся с принципами создания простых wpf-приложений.

Дополнительные материалы к занятию можно скачать здесь.

Вложенные файлы: Presentation_7.pptx

Вложенные папки: Lecture_7_1, Lecture_7_2, Lecture_7_3

На смену традиционным Windows Forms постепенно приходит технология Windows Presentation Foundation. У Windows Forms за плечами славная история, накоплен огромный объем программного обеспечения. Однако постепенно стали выявляться определенные проблемы.

  1. Разнообразие оборудования

    В настоящее время под Windows 7 работают самые разнообразные устройства - от персональных компьютеров до нетбуков, существует мобильная версия Windows 7 - Windows Phone 7. Персоналки обычно комплектуются большими мониторами с высоким разрешением, например, 1920 1080, разрешение ноутбуков поменьше, например, 1440 900, разрешение нетбуков и планшетных компьютеров и того меньше. Если оптимизировать традиционный двухмерный интерфейс под одно из этих устройств, то на других устройствах будут видны искажения.

  2. Возросшая мощь видеоплат

    Даже самая дешевая видеоплата в настоящее время имеет аппаратный ускоритель трехмерной графики. Жизнь не стоит на месте, и то что впечатляло 7-8 лет назад выглядит уже скучно. Пользователям гораздо удобнее пользоваться трехмерными возможностями интерфейса, чего не может дать традиционная технология GDI+.

  3. Унификация ПО

    Программистам и пользователям хотелось бы иметь такие же возможности веб-приложений, что и у программного обеспечения, написанного для настольных компьютеров. Новая технология 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-приложений.

Упражнение 10.1. Решение квадратного уравнения (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;

        }
    }
}
    

Получаем следующий результат: