http
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 новый проект:

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

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

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

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

Это стандартный вид окна. Но можно сделать браузерподобное окно (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.
Все, можно компилировать, теперь окно у нас будет со стрелочками навигации:

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

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

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

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

Откроем файл 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":

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

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