Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на C# для чайников


Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

WPF - это мощная графическая подсистема в составе .NET Framework, начиная с версии 3.0. Она имеет прямое отношение к XAML и спроектирована под влиянием технологий HTML и Flash с использованием аппаратного ускорения. Основные фишки WPF:

  • Максимально разгрузить CPU, передав основную работу по прорисовке интерфейсов видеокарте.

  • Web-подобная компоновка компонентов на форме без жесткой привязке к координатам с учетом содержимого для того что бы предотвратить урезание вашего содержимого (текста, графики или элементов управления).

  • Очень мощная модель рисования, при чем не пиксельная, как у виндовых форм, а на основе простых фигур, плюс возможность создавать 3D эффекты.

  • Каждый элемент управления поддерживает анимацию, которую можно по таймеру перерисовывать как угодна не тратя беспощадно ресурсы компьютера.

  • Поддержка стилей и шаблонов, уже очень давно не хватало тай функциональности людям которые пишут программы с уникальными интерфейсами

  • Гибкая работа с командами (New, Open, Copy).

  • Приложение на основе страниц. Старые оконные программы уходят в историю. Подобного типа приложений уже несколько лет практикует Apple в своей операционной системе Mac OS. Теперь и пользователи Widows  смогут получить удобные программные продукты.

  • Независимость от dpi и разрешение экрана.

А теперь пощупаем этот WPF на практике. И так, создаем в Visual Studio новый проект:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Тип приложения выберем WPF:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

У нас откроется конструктор форм и редактор XAML:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Мы можем менять свойства окна как через панель свойств, так и непосредтсвенно в тексте XAML файла:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Если мы запустим программу сейчас, то увидим просто пустое окно:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Это стандартный вид окна. Но можно сделать браузерподобное окно (NavigationWindow). Для этого в файле XAML указываем, что класс окна наследуется от NavigationWindow. Было так:

<Window x:Class="WpfApplication2.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="Главное окно" Height="350" Width="525">

    <Grid>

       

    </Grid>

</Window>

Мы делаем так:

<NavigationWindow x:Class="WpfApplication2.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="Главное окно" Height="350" Width="525">

</NavigationWindow>


Тэг <Grid></Grid> убираем, так как NavigationWindow его не поддерживает.

Еще нам надо отредактировать файл 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 WpfApplication2

{

    /// <summary>

    /// Логика взаимодействия для MainWindow.xaml

    /// </summary>

    public partial class MainWindow : Window

    {

        public MainWindow()

        {

            InitializeComponent();

        }

    }

}

А мы сделаем так:

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 WpfApplication2

{

    /// <summary>

    /// Логика взаимодействия для MainWindow.xaml

    /// </summary>

    public partial class MainWindow : NavigationWindow

    {

        public MainWindow()

        {

            InitializeComponent();

        }

    }

}

Тоесть, мы Windows заменяем на NavigationWindow.

Все, можно компилировать, теперь окно у нас будет со стрелочками навигации:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Правда, программа у нас пока ничего не делает и стрелочки навигации по этому не работают. Так что сейчас мы что нибудь запрограммируем, такое простенькое. Например, что бы при нажатии на кнопочку выскакивала надпись.

Для начала создадим парочку XAML страниц:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

На первую страницу кладем пару кнопок:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Для изменения надписи кнопки используем свойство Content:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

На второй странице размещаем метку:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Откроем файл Page2.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 WpfApplication2

{

    /// <summary>

    /// Логика взаимодействия для Page2.xaml

    /// </summary>

    public partial class Page2 : Page

    {

        public Page2()

        {

            InitializeComponent();

        }

    }

}

Перепишем конструктор класса Page2:

    public partial class Page2 : Page

    {

        public Page2(string str)

        {

            InitializeComponent();

            label1.Content = str;

        }

    }

Теперь переключимся на первую страницу, создадим обработчики для каждой кнопочки:

        private void button1_Click(object sender, RoutedEventArgs e)

        {

            Page2 page = new Page2("Нажата первая кнопка");

            this.NavigationService.Navigate(page);

        }

 

        private void button2_Click(object sender, RoutedEventArgs e)

        {

            Page2 page = new Page2("Нажата вторая кнопка");

            this.NavigationService.Navigate(page);

        }

Все, для того, что бы программа оказалась работоспособной, достаточно задать у MainWindows свойство Source равным "Page1.xaml":

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Все компилируем прогу и запускаем ее:

Windows Presentation Foundation (WPF). Урок 1. Что это такое и с чем его "едят"

Все, теперь и программка что то делает, и работают кнопочки навигации.

 

 


В избранное