Ви вже вмієте писати програми. Ви знаєте, що таке змінні, методи, класи, колекції. Ваші програми вміють обчислювати, зберігати дані, відповідати на запити. Але вони «говорять» з користувачем одним способом — через рядки тексту в консолі.
Уявіть інший рівень. Замість Console.WriteLine("Введіть ім'я:") — красиве текстове поле з підписом. Замість Console.ReadLine() — кнопка «Зберегти», яку можна натиснути мишею. Замість виведення чисел у стовпчик — діаграма, що оновлюється в реальному часі.
Це — десктопна розробка. І у .NET вона має потужну, зрілу екосистему.
Але перш ніж писати перший рядок XAML — варто зрозуміти контекст. Звідки все починалось. Чому є стільки різних технологій. І чому, попри домінування веб, десктопні застосунки не просто живі — вони незамінні для цілого класу задач.
Перші комп'ютери спілкувалися з людиною виключно через текст. Команди вводилися рядком, результат виводився рядком. Це була CLI-епоха (Command Line Interface).
Програміст та звичайний користувач жили в різних всесвітах. Щоб скористатися комп'ютером, потрібно було знати команди напам'ять. Помилка в одній літері — і нічого не працює. Комп'ютери були інструментом для спеціалістів, не для всіх.
Головний урок цієї епохи: текстовий інтерфейс ефективний, але не доступний. Щоб зробити комп'ютери масовими — потрібна була нова парадигма взаємодії.
У 1973 році дослідницька лабораторія Xerox PARC представила Xerox Alto — перший комп'ютер з графічним інтерфейсом. Вікна, іконки, курсор миші — все це з'явилося тут. Концепція WIMP (Windows, Icons, Menus, Pointer) стала основою GUI на десятиліття вперед.
У 1984 році Apple випустила Macintosh — перший масовий комп'ютер з GUI. Реклама «1984» зробила його подією культури. Але найважливішим була ідея: комп'ютер може бути зрозумілим без інструкцій. Ви бачите папку — ви розумієте, що туди можна покласти файли. Ви бачите кошик — ви розумієте, що туди йдуть видалені речі. Метафори реального світу перенесені в цифровий.
Microsoft випустила Windows 1.0 у 1985 році. На відміну від Mac, Windows працював поверх DOS і спочатку виглядав доволі скромно. Але версія Windows 3.1 (1992) та Windows 95 стали переломними — вони принесли GUI мільйонам звичайних користувачів.
Разом з Windows прийшли перші масові GUI-фреймворки: Visual Basic (1991) дозволяв перетягувати кнопки на форму мишею і вже через хвилину мати працюючий застосунок. Це була революція продуктивності для розробників.
Але VB мав обмеження: він генерував «важкий» нативний код, що погано масштабувався. Коли з'явився .NET (2002) — Microsoft запропонувала новий підхід.
З приходом .NET Framework у 2002 році Microsoft представила Windows Forms (WinForms) — першу GUI-технологію для платформи .NET. Принцип той самий, що у VB: перетягуй, налаштовуй, запускай. Але тепер — з потужністю C# і CLR.
WinForms використовував GDI+ для малювання — той самий механізм, що й Windows сам малював свої вікна. Це давало хорошу інтеграцію з ОС, але мало обмеження: растровий рендеринг, погане масштабування на HiDPI-екранах, відсутність підтримки сучасних UI-ефектів.
У 2006 році Microsoft представила Windows Presentation Foundation (WPF) — принципово нову архітектуру. WPF перейшов на DirectX-рендеринг, що дало векторну графіку, апаратне прискорення, повноцінну підтримку анімацій та візуальних ефектів. Замість перетягування кнопок — декларативна розмітка XAML. Замість event-spaghetti — патерн MVVM.
WPF змінив уявлення про те, яким може бути desktop UI у Windows.
Ось кілька цифр і фактів, які розставляють все на місце:
Ринок десктопного ПЗ не скорочується — він трансформується. Веб взяв на себе «легкі» задачі (читання новин, соцмережі, перегляд відео). Десктоп залишив за собою важкі задачі: складний UX, робота з файлами та пристроями, offline-режим, висока продуктивність.
Три парадигми розробки — три різних підходи до взаємодії з користувачем. Жодна не є «кращою»: кожна є правильним вибором для своєї задачі.
| Критерій | Консольний застосунок | Веб-застосунок | Десктопний застосунок |
|---|---|---|---|
| Взаємодія з користувачем | Текст: введення/виведення рядків | Браузер: HTML/CSS, event handlers | Нативне вікно: кнопки, форми, меню |
| Графіка та анімації | ❌ Обмежена (ANSI-кольори) | ✅ CSS анімації, Canvas, WebGL | ✅ DirectX/Skia, повноцінна 2D/3D |
| Доступ до ОС | ✅ Файлова система, процеси, мережа | ⚠️ Обмежений (browser sandbox) | ✅ Повний: реєстр, COM, API Windows |
| UX та зручність | 🔴 Складний для кінцевих користувачів | 🟡 Гарний, але залежить від браузера | 🟢 Нативний, інтегрований з ОС |
| Offline-робота | ✅ Завжди offline | ⚠️ Потребує додаткових зусиль (PWA) | ✅ Повна підтримка offline |
| Встановлення | ✅ Один виконуваний файл | ✅ Не потрібне | ⚠️ Інсталятор, оновлення |
| Crossplatform | ✅ .NET скрізь | ✅ Браузер скрізь | ⚠️ WPF — лише Windows; Avalonia — скрізь |
| Продуктивність | ✅ Мінімальні витрати ресурсів | 🟡 Залежить від JS-движка | ✅ Прямий доступ до GPU/CPU |
| Типові задачі | Скрипти, CLI-утиліти, автоматизація | Веб-сайти, SaaS, API | IDE, фото-редактори, ERP, CAD |
Десктоп — правильний вибір, коли:
1. Складний, «насичений» UX — коли інтерфейс не просто відображає дані, а є основним робочим інструментом. IDE, графічні редактори, DAW (Digital Audio Workstation) — тут потрібна максимальна контрольованість кожного пікселя, підтримка drag-and-drop, shortcuts, context menus, docking panels.
2. Інтенсивна робота з файлами та пристроями — коли застосунок читає/записує великі файли (відео, 3D-моделі, бази даних), підключається до обладнання (принтери, сканери, USB-пристрої, GPS) або потребує прямого доступу до файлової системи.
3. Offline-критична функціональність — коли застосунок має працювати без інтернету. Облік у магазині, польовий збір даних, медичне обладнання — тут веб просто не підходить.
4. Висока продуктивність — коли потрібно обробляти великі дані локально: відео-рендеринг, наукові симуляції, чисельні розрахунки. Десктоп не додає overhead браузерного движка.
5. Корпоративні внутрішні системи — ERP, CRM, системи обліку. Встановлюються один раз у корпоративній мережі, інтегруються з Active Directory, мають доступ до внутрішніх ресурсів.
✅ Ідеально для Desktop
🌐 Ідеально для Web
.NET надає кілька технологій для побудови десктопних застосунків. Кожна має свою нішу, вік і рівень зрілості. Давайте розберемось у кожній — щоб ви розуміли, чому цей курс побудований навколо WPF + Avalonia.
Рік: 2002 | Статус: Підтримується (legacy), .NET 8+
WinForms — найстаріша GUI-технологія в .NET. Побудований на GDI+ і Win32 API. Принцип роботи: перетягуєш контроли з toolbox на форму, подвійним кліком відкриваєш обробник події, пишеш код.
Сильні сторони:
Слабкі сторони:
Коли використовувати у 2024 році: Підтримка існуючих WinForms-проєктів. Дуже прості інструменти для внутрішнього використання, де UX — не пріоритет.
Рік: 2006 | Статус: Активно підтримується, .NET 8+
WPF — це те, що ми будемо вивчати в цьому курсі. Кардинальна переробка того, як будуються Windows-застосунки.
Ключові відмінності від WinForms:
Обмеження: Windows-only. WPF не запускається на macOS чи Linux.
Рік: 2015 | Статус: Не рекомендований (фактично заморожений)
UWP створювався для єдиної платформи Windows 10/11 + Xbox + HoloLens. Гарна ідея, але обмежений sandbox, труднощі з розповсюдженням за межами Store.
Microsoft фактично припинила розвиток UWP на користь WinUI 3. Не рекомендуємо вивчати UWP для нових проєктів у 2024 році.
Рік: 2021 | Статус: Активно розвивається, але ще не зрілий
WinUI 3 — наступник UWP, але без sandbox-обмежень. Використовує Fluent Design System (той самий, що у Windows 11). XAML-подібний синтаксис.
Проблема: Молода платформа з нестабільним API, обмеженою документацією та меншою спільнотою порівняно з WPF. Windows-only.
Перспектива: Можливо, це майбутнє Windows-розробки. Але зараз — для нових проєктів WPF або Avalonia є більш надійним вибором.
Рік: 2022 | Статус: Активно розвивається
MAUI (Multi-platform App UI) — наступник Xamarin.Forms. Один код → Windows, macOS, iOS, Android.
Відмінність від Avalonia: MAUI орієнтований на мобільну розробку, що перенесена на desktop. Компоненти адаптовані під mobile UX. Для традиційного desktop (менюбар, складні форми, docking) MAUI менш зручний.
Коли вибирати: Коли вам потрібен mobile-first підхід з Desktop-підтримкою (наприклад, корпоративний застосунок для iPhone + Windows).
Рік: 2013 (публічно), активний розвиток з 2018 | Статус: Стабільний, production-ready
Avalonia — це відповідь спільноти на питання: «Чому WPF не кросплатформний?». Взяли найкраще з WPF — XAML, Binding, MVVM, Styles — і переписали рендеринг на Skia (та самою бібліотекою, що використовує Flutter та Chrome).
Результат: той самий WPF-dosвід, але на Windows, macOS, Linux, Android, iOS, і навіть WebAssembly (що ми використовуємо в цьому курсі для live XAML previewer!).
Це і є наш companion: після кожної WPF-теми ми будемо бачити, як те саме реалізується в Avalonia — з мінімальними відмінностями.
Для зручного вибору — зведена таблиця всіх технологій за ключовими критеріями:
| Технологія | Рік | Платформи | Рендеринг | Синтаксис UI | MVVM | Зрілість | Рекомендація |
|---|---|---|---|---|---|---|---|
| WinForms | 2002 | Windows | GDI+ (растр) | Code/Designer | ❌ | 🟢 Зріла | Legacy підтримка |
| WPF | 2006 | Windows | DirectX (вектор) | XAML | ✅ | 🟢 Зріла | ⭐ Основа курсу |
| UWP | 2015 | Win10/11 | DirectX | XAML | ✅ | 🟡 Заморожена | ❌ Не рекомендується |
| WinUI 3 | 2021 | Windows | DirectX | XAML | ✅ | 🟡 Молода | Майбутнє, але ризиковано |
| MAUI | 2022 | Win/Mac/iOS/Android | Native | XAML | ✅ | 🟡 Молода | Mobile-first проєкти |
| Avalonia | 2018+ | Win/Mac/Linux/WASM | Skia | XAML (.axaml) | ✅ | 🟢 Зріла | ⭐ Companion курсу |
Перед тим як перейти до коду — давайте відверто поговоримо про вибір технології для курсу. Це важливо, бо ви маєте розуміти чому ви вчите саме це.
WPF існує з 2006 року. Вісімнадцять років активного використання — це:
Коли ви зустрінете незрозумілу помилку — для WPF майже гарантовано є Stack Overflow відповідь. Для WinUI 3 чи MAUI така впевненість набагато нижча.
XAML, що ви вивчите в WPF — це той самий XAML, що використовується в:
Вивчивши XAML в WPF, ви розумієте 80–90% XAML в будь-якій іншій технології з цього списку. Це інвестиція, що окупається.
MVVM (Model-View-ViewModel), що ми вивчимо в контексті WPF — це стандарт для всього .NET UI:
WPF — найкраще місце для вивчення MVVM, бо технологія достатньо зріла, щоб бачити патерн у «чистому» вигляді, без зайвих абстракцій.
Avalonia — кросплатформний спадкоємець WPF. Порівняйте:
WPF Avalonia
────────────────────────────────── ──────────────────────────────────
MainWindow.xaml MainWindow.axaml
xmlns="http://...wpf..." xmlns="https://github.com/avaloniaui"
DependencyProperty.Register(...) AvaloniaProperty.Register<...>(...)
Binding (Reflection) Binding (Compiled, type-safe)
Style + Trigger Style + Pseudo-classes (:hover)
ControlTemplate ControlTheme
App.xaml → StartupUri App.axaml → Program.cs entry point
Різниця є, але вона поверхнева. Концепції — ідентичні. Якщо ви вмієте WPF — Avalonia вивчається за 1–2 тижні, а не за місяці.
Теорія без практики — мертва. Щоб у вас була мотивація проходити всі 46 статей цього курсу, давайте одразу покажемо, до чого ми прийдемо.
Протягом курсу ми поступово будуємо повноцінний менеджер задач — десктопний застосунок з реалістичним UX:
📋 Управління задачами
🎨 Сучасний UI
🏗️ Правильна архітектура
🌍 Кросплатформ
Кожен блок курсу додає щось нове до цього застосунку. Ви не просто вивчаєте теорію в ізоляції — ви будуєте реальний продукт.
Відкрийте будь-які 3 десктопних застосунки, якими ви регулярно користуєтесь (наприклад, Telegram Desktop, Visual Studio або VS Code, будь-яка гра чи утиліта). Для кожного спробуйте визначити:
.dll файли типу PresentationFramework.dll (WPF) або Avalonia.dll (Avalonia).WPF використовується в дуже відомих продуктах. Знайдіть підтвердження (через Googling, GitHub, офіційну документацію) що принаймні 3 з наведених продуктів побудовані на WPF або містять WPF-компоненти:
Оберіть будь-який продукт, що має і десктопну і веб-версію (наприклад: Figma, Telegram, Slack, Notion, Spotify). Проведіть порівняльний аналіз:
Напишіть короткий (300–500 слів) текстовий аналіз вашого порівняння. Це формує розуміння, для яких задач desktop є правильним вибором.
Ця стаття відповіла на фундаментальне питання: навіщо взагалі вивчати десктопну розробку у 2020-х?
Ключові висновки:
У наступній статті ми зайдемо «під капот» WPF — дізнаємось, як влаштована його архітектура, чому рендеринг через DirectX дає таку якість графіки та що таке Dispatcher.