Windows Presentation Foundation (WPF)
Windows Presentation Foundation, w skrócie WPF, to platforma graficzna opracowana przez firmę Microsoft, służąca do tworzenia nowoczesnych interfejsów użytkownika (UI) dla aplikacji działających w systemie Windows. WPF jest częścią platformy .NET i wykorzystuje technologię XAML (eXtensible Application Markup Language) do definiowania układu i wyglądu interfejsu.
Historia
Projekt WPF został zaprezentowany po raz pierwszy na konferencji MSDN w 2006 roku jako nowoczesna alternatywa dla tradycyjnych technologii takich jak Windows Forms oraz MFC. Oficjalnie WPF trafiło do użytku publicznego w wersji Windows Vista w 2007 roku jako część .NET Framework 3.0. Od tego czasu platforma była rozwijana w kolejnych wersjach .NET, a od 2016 roku dostępna jest także w otwartym projekcie .NET Core (obecnie .NET 5+).
Architektura
WPF opiera się na kilku kluczowych warstwach:
- System graficzny – oparty na DirectX, zapewnia wysoką wydajność renderowania 2D i 3D.
- Model prezentacji – umożliwia oddzielenie logiki aplikacji od warstwy UI (np. wzorzec MVVM).
- Kontrola sterowania – bogaty zestaw gotowych kontrolek (buttony, listy, drzewka, itp.).
- System stylów i szablonów – pozwala na pełną personalizację wyglądu przy pomocy XAML.
- Mechanizm wiązania danych – dwukierunkowe wiązanie danych pomiędzy modelem a widokiem.
Główne elementy języka XAML
WPF używa języka znaczników XAML do definiowania struktury interfejsu. Przykładowy plik XAML może wyglądać następująco:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Przykład WPF" Height="300" Width="400">
<Grid>
<Button Content="Kliknij mnie" Width="120" Height="30"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="Button_Click"/>
</Grid>
</Window>
W kodzie C# obsługa zdarzenia może wyglądać tak:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Witaj w WPF!");
}
Kluczowe funkcjonalności
Układy (Layout)
WPF oferuje zestaw paneli układu, m.in. Grid, StackPanel, DockPanel, WrapPanel oraz Canvas, które pozwalają elastycznie rozmieszczać elementy interfejsu.
Stylowanie i szablony
System stylów umożliwia definiowanie style i control templates, co pozwala na zmianę wyglądu całych grup kontrolek jednocześnie bez modyfikacji ich kodu.
Animacje i efekty graficzne
Poprzez Storyboardy i klasy animacji (DoubleAnimation, ColorAnimation) można tworzyć płynne przejścia, efekty przyspieszeń oraz animacje 3‑D.
Wiązanie danych (Data Binding)
Mechanizm wiązania danych obsługuje różne tryby (OneWay, TwoWay, OneTime) i umożliwia wykorzystanie INotifyPropertyChanged do automatycznej aktualizacji UI.
Wzorce projektowe
Najbardziej rozpowszechnionym wzorcem w aplikacjach WPF jest Model‑View‑ViewModel (MVVM), który ułatwia testowanie oraz separację warstw.
Środowiska programistyczne
Do tworzenia aplikacji WPF najczęściej używa się:
- Microsoft Visual Studio – pełne IDE z projektantem XAML i narzędziami diagnostycznymi.
- Blend for Visual Studio – specjalistyczny edytor UI ułatwiający projektowanie animacji i szablonów.
- Różne edytory tekstowe (np. VS Code) wraz z rozszerzeniami wspierającymi XAML.
Zastosowania
WPF jest wykorzystywane w:
- aplikacjach biurowych (np. Microsoft Office w starszych wersjach),
- systemach kontroli przemysłowej,
- narzędziach deweloperskich,
- oprogramowaniu medycznym i naukowym,
- głównych aplikacjach przedsiębiorstwowych (ERP, CRM).
Porównanie z innymi technologiami UI
| Cecha | WPF | WinForms | UWP | Electron |
|---|---|---|---|---|
| Renderowanie | DirectX (GPU) | GDI+ | DirectX / WinUI | Chromium (HTML/CSS) |
| Definicja UI | XAML | Kod C# lub Designer | XAML | HTML |
| Wsparcie 3‑D | Tak | Ograniczone | Tak (DirectX) | Nie |
| Wieloplatformowość | Windows (z .NET Core – częściowo Linux/macOS przez Avalonia) | Tylko Windows | Tylko Windows 10+ | Windows, macOS, Linux |
| Model MVVM | Wbudowane wsparcie | Rzadko używany | Wbudowane wsparcie | Nie |
Przykładowy projekt
Poniżej znajdziesz minimalny szkielet aplikacji WPF stworzonej w C#:
using System.Windows;
namespace MojaAplikacjaWPF
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent(); // ładuje XAML
}
}
}
Plik MainWindow.xaml definiuje interfejs (zobacz sekcję „Główne elementy języka XAML”).
Rozwój i przyszłość
Od wersji .NET 5 platforma WPF jest rozwijana jako otwarto‑źródłowy projekt na GitHubie (GitHub – jednak odnośniki zewnętrzne nie są podawane). Microsoft kontynuuje aktualizacje, wprowadzając wsparcie dla najnowszych wersji systemu Windows, poprawki wydajności oraz integrację z technologią WinUI 3 w trybie hybrydowym.